web-dev-qa-db-fra.com

Ouvrir un lien dans le navigateur avec le bouton Java?

Comment puis-je ouvrir un lien dans le navigateur par défaut avec un clic de bouton, le long des lignes de

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        open("www.google.com"); // just what is the 'open' method?
    }
});

?

94
Malasuerte94

Utilisez la méthode Desktop # parcourir (URI) . Il ouvre un URI dans le navigateur par défaut de l'utilisateur.

public static boolean openWebpage(URI uri) {
    Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null;
    if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
        try {
            desktop.browse(uri);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return false;
}

public static boolean openWebpage(URL url) {
    try {
        return openWebpage(url.toURI());
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }
    return false;
}
213
Vulcan
public static void openWebpage(String urlString) {
    try {
        Desktop.getDesktop().browse(new URL(urlString).toURI());
    } catch (Exception e) {
        e.printStackTrace();
    }
}
33
Daniel
try {
    Desktop.getDesktop().browse(new URL("http://www.google.com").toURI());
} catch (Exception e) {}

remarque: vous devez inclure les importations nécessaires à partir de Java.net

22
AdelM

Une solution sans l'environnement de bureau est BrowserLauncher2 . Cette solution est plus générale car sur Linux, Desktop n'est pas toujours disponible.

La réponse longue est affichée à https://stackoverflow.com/a/21676290/873282

5
koppor
private void ButtonOpenWebActionPerformed(Java.awt.event.ActionEvent evt) {                                         
        try { 
         String url = "https://www.google.com";
         Java.awt.Desktop.getDesktop().browse(Java.net.URI.create(url));
       }
       catch (Java.io.IOException e) {
           System.out.println(e.getMessage());
       }
    }    
2
user8039515

Je sais que c’est une vieille question mais parfois la Desktop.getDesktop() produit un plantage imprévu comme dans Ubuntu 18.04. Par conséquent, je dois réécrire mon code comme ceci: 

public static void openURL(String domain)
{
    String url = "https://" + domain;
    Runtime rt = Runtime.getRuntime();
    try {
        if (MUtils.isWindows()) {
            rt.exec("rundll32 url.dll,FileProtocolHandler " + url).waitFor();
            Debug.log("Browser: " + url);
        } else if (MUtils.isMac()) {
            String[] cmd = {"open", url};
            rt.exec(cmd).waitFor();
            Debug.log("Browser: " + url);
        } else if (MUtils.isUnix()) {
            String[] cmd = {"xdg-open", url};
            rt.exec(cmd).waitFor();
            Debug.log("Browser: " + url);
        } else {
            try {
                throw new IllegalStateException();
            } catch (IllegalStateException e1) {
                MUtils.alertMessage(Lang.get("desktop.not.supported"), MainPn.getMainPn());
                e1.printStackTrace();
            }
        }
    } catch (IOException | InterruptedException e) {
        e.printStackTrace();
    }
}

public static boolean isWindows()
{
    return OS.contains("win");
}

public static boolean isMac()
{
    return OS.contains("mac");
}

public static boolean isUnix()
{
    return OS.contains("nix") || OS.contains("nux") || OS.indexOf("aix") > 0;
}

Ensuite, nous pouvons appeler cet assistant à partir de l'instance:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        MUtils.openURL("www.google.com"); // just what is the 'open' method?
    }
});
0
Teocci
public static void openWebPage(String url) {
        try {
            Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null;
            if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) {
                desktop.browse(new URI(url));
            }
            throw new NullPointerException();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, url, "", JOptionPane.PLAIN_MESSAGE);
        }
    }
0
sambuca