Tarayıcıda java düğmesiyle bir bağlantı açılsın mı? [çiftleme]


103

Varsayılan tarayıcıda aşağıdaki satırlar boyunca bir düğme tıklamasıyla bir bağlantıyı nasıl açabilirim?

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

?


2
Son sorunuzun kabul edilen yanıtında kullanılan sınıf için JavaDocs'a bakmayı denemiş olabilirsiniz ! O dokümanlar. çok kullanışlıdır, onları IDE'ye ekleyin veya çevrimiçi sürümü yer imlerine ekleyin.
Andrew Thompson

Yanıtlar:


223

Kullanım Masaüstü # göz (URI) yöntemini. Kullanıcının varsayılan tarayıcısında bir URI açar.

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

bu, Netbeans 7.x tarafından oluşturulan JAR dosyalarında çalışmıyor gibi görünüyor. Kod Netbeans'den çalıştırıldığında çalışıyor, ancak bir JAR dosyası olarak konuşlandırıldığında değil ... en azından benim deneyimime göre. Hala bir çözüm arıyorum.
MountainX

@MountainX Hata ayıklayın ve masaüstünün desteklendiğini ve güvenlik uygulamalarının masaüstü örneğine erişiminizi kısıtlamadığını doğrulayın. JAR'ı bir uygulama olarak çalıştırıyorsanız, muhtemelen suçlu güvenliktir.
FThompson

@ Vulcan - JAR'ı bir uygulama olarak çalıştırmıyorum. Bunun çalışmasını engelleyecek herhangi bir güvenlik ayarından haberdar değilim. Arayarak "etrafında çalıştım" new ProcessBuilder("x-www-browser", uri.toString());. Güvenlik kısıtlamaları olsaydı ProcessBuilder çağrısının çalışmayacağını düşünürdünüz. Ama işe yarıyor. Neden desktop.browse(uri)işe yaramadığına dair hiçbir fikrim yok, ancak birçok insan için işe yaramadığını gördüm. Bunun bir Netbeans sorunu olabileceğini tahmin ediyordum, ama bilmiyorum.
MountainX

Kullanıcı exten dosyaya "html" gibi özel bir "birlikte aç" eylemi atamışsa, bu, tarayıcıyı AÇMAZ, ancak kullanıcının ona bağladığı program .... Bu hiç de bir çözüm değildir!
thesaint

@thesaint Harika nokta; bir alternatif openWebpage, Runtime.exec(..)önceden tanımlanmış bir dizi popüler tarayıcı adlarını kullanabilir ve bunlara URL'yi ileterek yineleyebilir. Bu, aynı zamanda, belirsiz tarayıcılara sahip kullanıcılar için çalışmama uyarısına da sahiptir, ancak boş bir zamanım olduğunda yakında bu yanıta yazacağım ve ekleyeceğim.
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) {}

not: gerekli ithalatları dahil etmelisiniz 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

Bunun eski bir soru olduğunu biliyorum ama bazen Desktop.getDesktop()Ubuntu 18.04'teki gibi beklenmedik bir çökme yaratıyor. Bu nedenle, kodumu şu şekilde yeniden yazmam gerekiyor:

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

O zaman bu yardımcıyı örnekten çağırabiliriz:

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);
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.