使用Java按钮在浏览器中打开链接?[重复]


103

如何在默认浏览器中通过单击按钮打开链接,如下所示:

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


2
您可能已尝试查看JavaDocs中用于上一个问题的可接受答案的类!那些文档。非常方便,可以将它们附加到您的IDE或为在线版本添加书签。
Andrew Thompson

Answers:


223

使用Desktop#browse(URI)方法。它将在用户的默认浏览器中打开一个URI。

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

这在Netbeans 7.x创建的JAR文件中似乎不起作用。当代码从Netbeans运行时有效,但是当作为JAR文件部署时则无效……至少以我的经验而言。我仍在寻找解决方案。
MountainX

@MountainX调试并验证是否支持桌面,并且安全性实施方式不限制您访问桌面实例。如果将JAR作为applet运行,则安全性很可能是罪魁祸首。
FThompson

@Vulcan-我没有将JAR作为applet运行。我不知道会阻止此操作的任何安全设置。我通过致电来“解决”它new ProcessBuilder("x-www-browser", uri.toString());。您会认为,如果存在安全限制,则ProcessBuilder调用将无法正常工作。但这确实有效。我不知道为什么desktop.browse(uri)不起作用,但是我已经看到它对很多人不起作用。我猜想可能是Netbeans的问题,但我不知道。
MountainX

如果用户已将扩展名类似于“ html”的文件分配给自定义“打开方式”操作,则该操作将不会打开浏览器,但是用户已将其链接到的程序...。这根本不是解决方案!
圣徒

@thesaint大观点;另一种选择openWebpage是使用Runtime.exec(..)一组流行的浏览器名称并对其进行遍历,并将URL传递给它们。但是,这也有一个警告,就是不为使用晦涩的浏览器的用户运行,但是,我有空的时候会尽快将其添加并添加到此答案中。
FThompson,2015年

37
public static void openWebpage(String urlString) {
    try {
        Desktop.getDesktop().browse(new URL(urlString).toURI());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

25
try {
    Desktop.getDesktop().browse(new URL("http://www.google.com").toURI());
} catch (Exception e) {}

注意:您必须包括从 java.net



3
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());
    }
}

0

我知道这是一个古老的问题,但是有时会Desktop.getDesktop()产生意外的崩溃,例如在Ubuntu 18.04中。因此,我必须像这样重新编写我的代码:

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

然后,我们可以从实例中调用此帮助器:

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

0
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);
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.