デフォルトのシステムブラウザでjavafxからWeb URLを開こうとしています。これに関する公式のドキュメントは見つかりませんでした。どんな手掛かり?
編集:私は チュートリアル を見つけましたが、機能しません。 MacOsXを使用していますが、起動してみました
Java.awt.Desktop.getDesktop().browse(new URI(url));
HeadlessExcelption
hostServices.showDocument(location) を使用します。
アプリケーションのstartメソッドに次のコードを配置してみてください。
getHostServices().showDocument("http://www.yahoo.com");
Jewelseaの回答を補足します。getHostServices()の呼び出し方法がわからない場合は、メインクラスでこれを試してください。
HostServicesDelegate hostServices = HostServicesFactory.getInstance(this);
hostServices.showDocument(WEBSITE);
もう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)
が何らかの理由でエラーなしでハングした場合は、このオプションを使用できます。
これを試して:
try {
Desktop.getDesktop().browse(new URL("https://google.com").toURI());
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
この機能は実装されていないため、実行できません: 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は機能するはずです。
以下は、ボタンがアクティブ化されたときにシーンコントローラー内で機能するスクリプトです。
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 {
}
}