Buka tautan di browser dengan tombol java? [duplikat]

103

Bagaimana saya bisa membuka tautan di browser default dengan klik tombol, di sepanjang baris

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

?

Malasuerte94
sumber
2
Anda mungkin telah mencoba melihat JavaDocs untuk kelas yang digunakan dalam jawaban yang diterima dari pertanyaan terakhir Anda ! Dokumen itu. sangat berguna, baik lampirkan ke IDE Anda atau tandai versi on-line.
Andrew Thompson
Pertanyaan duplikat: stackoverflow.com/q/5226212/873282
koppor

Jawaban:

223

Gunakan metode Desktop # browse (URI) . Ini membuka URI di browser default pengguna.

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;
}
FThompson
sumber
ini tampaknya tidak berfungsi di file JAR yang dibuat oleh Netbeans 7.x. Ini berfungsi ketika kode dijalankan dari Netbeans, tetapi tidak ketika digunakan sebagai file JAR ... setidaknya menurut pengalaman saya. Saya masih mencari solusi.
MountainX
@MountainX Debug dan verifikasi bahwa desktop didukung dan implementasi keamanan tidak membatasi Anda untuk mengakses instance desktop. Jika Anda menjalankan JAR sebagai applet, kemungkinan penyebabnya adalah keamanan.
FThompson
@ Vulcan - Saya tidak menjalankan JAR sebagai applet. Saya tidak mengetahui adanya pengaturan keamanan yang akan mencegah ini bekerja. Saya "mengatasinya" dengan menelepon new ProcessBuilder("x-www-browser", uri.toString());. Anda akan berpikir bahwa jika ada batasan keamanan, panggilan ProcessBuilder tidak akan berfungsi. Tapi itu berhasil. Saya tidak tahu mengapa desktop.browse(uri)tidak berhasil, tetapi saya telah melihat bahwa itu tidak berhasil untuk banyak orang. Saya menduga mungkin ini masalah Netbeans, tapi saya tidak tahu.
MountainX
Jika pengguna telah menetapkan tindakan "buka dengan" khusus ke file yang diperluas seperti "html" maka ini TIDAK akan membuka browser, tetapi program yang telah dihubungkan dengan pengguna .... Ini sama sekali bukan solusi!
santo
@saint Poin yang bagus; alternatif openWebpagedapat menggunakan Runtime.exec(..)dan mengulang melalui kumpulan nama browser populer yang telah ditentukan sebelumnya, meneruskan URL kepada mereka. Itu juga memiliki peringatan untuk tidak berjalan untuk pengguna dengan peramban yang tidak jelas, namun, saya akan menulis dan menambahkannya ke jawaban ini segera ketika saya punya waktu luang.
FThompson
37
public static void openWebpage(String urlString) {
    try {
        Desktop.getDesktop().browse(new URL(urlString).toURI());
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Daniel
sumber
25
try {
    Desktop.getDesktop().browse(new URL("http://www.google.com").toURI());
} catch (Exception e) {}

catatan: Anda harus memasukkan impor yang diperlukan dari java.net

AdelM
sumber
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());
    }
}
MS
sumber
0

Saya tahu bahwa ini adalah pertanyaan lama tetapi terkadang Desktop.getDesktop()menghasilkan crash yang tidak terduga seperti di Ubuntu 18.04. Oleh karena itu, saya harus menulis ulang kode saya seperti ini:

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

Kemudian kita dapat memanggil helper ini dari contoh:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        MUtils.openURL("www.google.com"); // just what is the 'open' method?
    }
});
Teocci
sumber
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);
    }
}
MS
sumber