Открыть ссылку в браузере с помощью кнопки java? [дубликат]

103

Как я могу открыть ссылку в браузере по умолчанию одним нажатием кнопки в строках

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

?

Malasuerte94
источник
2
Возможно, вы пытались посмотреть в JavaDocs класс, который используется в принятом ответе на ваш последний вопрос ! Эти документы. очень удобны, либо прикрепите их к IDE, либо добавьте в закладки онлайн-версию.
Эндрю Томпсон
Повторяющийся вопрос: stackoverflow.com/q/5226212/873282
koppor

Ответы:

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;
}
Ф. Томпсон
источник
похоже, это не работает в файлах JAR, созданных Netbeans 7.x. Он работает, когда код запускается из Netbeans, но не при развертывании в виде файла JAR ... по крайней мере, по моему опыту. Я все еще ищу решение.
MountainX
@MountainX Выполните отладку и убедитесь, что рабочий стол поддерживается и что реализации безопасности не ограничивают вас в доступе к экземпляру рабочего стола. Если вы запускаете JAR как апплет, вероятно, виновата безопасность.
FThompson
@ Vulcan - Я не использую JAR как апплет. Мне не известны какие-либо настройки безопасности, которые помешали бы этому работать. Я «обошел» это, позвонив new ProcessBuilder("x-www-browser", uri.toString());. Можно подумать, что если бы были ограничения безопасности, вызов ProcessBuilder не работал бы. Но это действительно работает. Я понятия не имею, почему desktop.browse(uri)не работает, но я видел, что это не работает для многих людей. Я догадывался, что это проблема Netbeans, но не знаю.
MountainX
Если пользователь назначил настраиваемое действие «открыть с помощью» для расширения файла, такого как «html», тогда это НЕ откроет браузер, а программу, с которой пользователь связал его .... Это вообще не решение!
thesaint
@thesaint Отличная точка; альтернатива openWebpageможет использовать Runtime.exec(..)и перебирать заранее определенный набор популярных имен браузеров, передавая им URL. Тем не менее, это также имеет предостережение не запускать для пользователей с малоизвестными браузерами, но я напишу и добавлю его в этот ответ вскоре, когда у меня будет свободное время.
FThompson
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);
    }
}
РС
источник