Open a link in browser with java button? [duplicate]
Asked Answered
S

7

108

How can I open a link in default browser with a button click, along the lines of

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

?

Shelled answered 10/6, 2012 at 8:52 Comment(2)
You might have tried looking at the JavaDocs for the class that is used in the accepted answer of your last question! Those docs. are very handy, either attach them to you IDE or bookmark the on-line version.Transcendent
Duplicate question: https://mcmap.net/q/158982/-how-to-open-url-in-default-webbrowser-using-java/873282Footle
A
232

Use the Desktop#browse(URI) method. It opens a URI in the user's default browser.

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;
}
Alamo answered 10/6, 2012 at 8:55 Comment(6)
this doesn't appear to work in JAR files created by Netbeans 7.x. It works when the code is run from Netbeans, but not when deployed as a JAR file... at least in my experience. I'm still looking for a solution.Isidor
@Isidor Debug and verify that the desktop is supported and that security implementations aren't restricting you from accessing the desktop instance. If you are running the JAR as an applet, security is the likely culprit.Alamo
@Vulcan--I'm not running the JAR as an applet. I'm not aware of any security settings that would prevent this from working. I "worked around" it by calling new ProcessBuilder("x-www-browser", uri.toString());. You would think that if there were security restrictions, the ProcessBuilder call would not work. But it does work. I have no idea why desktop.browse(uri) doesn't work, but I have seen that it doesn't work for a lot of people. I was guessing maybe it's a Netbeans issue, but I don't know.Isidor
If the user has assigned a custom "open with" action to the file exten like "html" then this will NOT open the browser, but the program the user has linked it with.... This is not a solution at all!Behn
@Behn Great point; an alternative openWebpage could use Runtime.exec(..) and iterate through a pre-defined set of popular browser names, passing them the URL. That also has the caveat of not running for users with obscure browsers, however, but I'll write and add it to this answer soon when I have a free moment.Alamo
Iterating over a pre-defined set of popular browsers will also not yield a desirable result for some users. They may have a default browser of Internet Explorer and our hypothetical program may place Chrome before IE in the list of browsers. The user may even have IE open and then wonder why Chrome is being used and not their default browser, IE.Recrystallize
A
39
public static void openWebpage(String urlString) {
    try {
        Desktop.getDesktop().browse(new URL(urlString).toURI());
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Aultman answered 2/6, 2013 at 2:32 Comment(0)
D
25
try {
    Desktop.getDesktop().browse(new URL("http://www.google.com").toURI());
} catch (Exception e) {}

note: you have to include necessary imports from java.net

Dortheydorthy answered 19/8, 2013 at 17:37 Comment(0)
F
5

A solution without the Desktop environment is BrowserLauncher2. This solution is more general as on Linux, Desktop is not always available.

The lenghty answer is posted at https://mcmap.net/q/158982/-how-to-open-url-in-default-webbrowser-using-java

Footle answered 21/6, 2015 at 12:7 Comment(0)
S
4
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());
    }
}
Shape answered 20/5, 2017 at 6:28 Comment(1)
it worked perfect! thanksApatite
P
1
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);
    }
}
Princess answered 21/11, 2017 at 12:42 Comment(0)
S
1

I know that this is an old question but sometimes the Desktop.getDesktop() produces an unexpected crash like in Ubuntu 18.04. Therefore, I have to re-write my code like this:

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;
}

Then we can call this helper from the instance:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        MUtils.openURL("www.google.com"); // just what is the 'open' method?
    }
});
Suspicious answered 9/8, 2018 at 4:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.