Відкрити посилання в браузері за допомогою кнопки java? [дублікат]


103

Як я можу відкрити посилання у веб-переглядачі за замовчуванням натисканням кнопки по рядках

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

?


2
Можливо, ви спробували подивитися на JavaDocs для класу, який використовується у прийнятій відповіді на ваше останнє запитання ! Ці документи. дуже зручні, або приєднайте їх до IDE, або додайте до закладок он-лайн версію.
Ендрю Томпсон

Повторювані питання: stackoverflow.com/q/5226212/873282
koppor

Відповіді:


223

Скористайтеся методом Desktop # Browser (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

Якщо користувач призначив власну дію "відкрити з" для файлу exten типу "html", це НЕ відкриє браузер, але програма, з якою користувач пов’язав це .... Це зовсім не рішення!
святого

@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);
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.