ブラウザで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

回答:


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をアプレットとして実行している場合、セキュリティが原因である可能性があります。
FThompson 2014

@Vulcan-JARをアプレットとして実行していません。これが機能しなくなるセキュリティ設定については知りません。を呼び出すことで「回避」しましたnew ProcessBuilder("x-www-browser", uri.toString());。セキュリティ制限がある場合、ProcessBuilder呼び出しは機能しないと考えるでしょう。しかし、それは機能します。なぜdesktop.browse(uri)うまくいかないのかはわかりませんが、多くの人にとってはうまくいかないことがわかりました。おそらくNetbeansの問題だと思っていましたが、わかりません。
MountainX

ユーザーが「html」のようなファイルにカスタムの「で開く」アクションをファイルに割り当てた場合、これはブラウザーを開きませんが、ユーザーがリンクしたプログラムを開きます....これはまったく解決策ではありません!
thesaint

@thesaint素晴らしい点。別の方法でopenWebpageRuntime.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);
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.