web-dev-qa-db-ja.com

Java fxアプリケーションからデフォルトのシステムブラウザを開くにはどうすればよいですか?

デフォルトのシステムブラウザでjavafxからWeb URLを開こうとしています。これに関する公式のドキュメントは見つかりませんでした。どんな手掛かり?

編集:私は チュートリアル を見つけましたが、機能しません。 MacOsXを使用していますが、起動してみました

Java.awt.Desktop.getDesktop().browse(new URI(url));

HeadlessExcelption

26
Advanced

hostServices.showDocument(location) を使用します。

アプリケーションのstartメソッドに次のコードを配置してみてください。

getHostServices().showDocument("http://www.yahoo.com");
42
jewelsea

Jewelseaの回答を補足します。getHostServices()の呼び出し方法がわからない場合は、メインクラスでこれを試してください。

HostServicesDelegate hostServices = HostServicesFactory.getInstance(this);
hostServices.showDocument(WEBSITE);

http://docs.Oracle.com/javafx/2/api/javafx/application/HostServices.html#showDocument(Java.lang.String)

14
ceklock

もう1つのオプションは、ProcessBuilderを使用することです。

_public static void openWebpage(String url) {
    try {
        new ProcessBuilder("x-www-browser", url).start();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
_

Desktop.getDesktop().browse(uri)が何らかの理由でエラーなしでハングした場合は、このオプションを使用できます。

8
Eldelshell

これを試して:

try {
    Desktop.getDesktop().browse(new URL("https://google.com").toURI());
} catch (IOException e) {
    e.printStackTrace();
} catch (URISyntaxException e) {
    e.printStackTrace();
}
4
Aupr

この機能は実装されていないため、実行できません: https://javafx-jira.kenai.com/browse/RT-21

問題は、同じVMでawt-stackとjfxを必要とするものを起動できないことです。決定-別のJVMを使用することです。別のVMを起動し、ソケットによる参照でコマンドを受け入れるだけです。

それは1つの方法であり、別の方法です-Javaからブラウザ呼び出しの他の方法を見つけることです-これはjavafx-2に固有のタスクではなく、Javaに固有のタスクです。

しかし、開発者はコメントを追加しました:

Anthony Petrovがコメントを追加しました-2013年5月17日05:09 PM FX8を使用すると、ヘッドフルAWTをFXと同じVMで実行できます。したがって、AWT APIは機能するはずです。

2
Alexander Kirov

以下は、ボタンがアクティブ化されたときにシーンコントローラー内で機能するスクリプトです。

package sample;


import com.Sun.deploy.uitoolkit.impl.fx.HostServicesFactory;
import com.Sun.javafx.application.HostServicesDelegate;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.stage.Stage;

public class Controller extends Application {

    public void openBrowser(ActionEvent actionEvent) throws Exception {

        HostServicesDelegate hostServices = HostServicesFactory.getInstance(this);
        getHostServices().showDocument("http://www.yahoo.com");

    }

    @Override
    public void start(Stage primaryStage) throws Exception {

    }
}
1
rainer