如何从java fx应用程序中打开默认系统浏览器?

Adv*_*ced 25 javafx javafx-2

我正在尝试从javafx在默认系统浏览器中打开一个Web URL.我没有找到任何关于此的官方文件.任何线索?

编辑:我找到了一个教程,但它不起作用.我正在使用MacOsX,我尝试启动

java.awt.Desktop.getDesktop().browse(new URI(url));
Run Code Online (Sandbox Code Playgroud)

但是我得到了 HeadlessExcelption

jew*_*sea 42

使用hostServices.showDocument(location).

尝试将以下代码放在应用程序的start方法中:

getHostServices().showDocument("http://www.yahoo.com");
Run Code Online (Sandbox Code Playgroud)


cek*_*ock 15

补充jewelsea的答案,如果您不知道如何调用getHostServices(),那么请在您的主类上尝试:

HostServicesDelegate hostServices = HostServicesFactory.getInstance(this);
hostServices.showDocument(WEBSITE);
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,诸如HostServicesDelegate之类的类不是公开记录的JavaFX API的一部分,并且可能在以后的Java版本(例如Java 9)中不可用. (7认同)

Eld*_*ell 8

另一种选择是使用ProcessBuilder:

public static void openWebpage(String url) {
    try {
        new ProcessBuilder("x-www-browser", url).start();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果Desktop.getDesktop().browse(uri)由于某种原因挂起而没有任何错误,您可以使用此选项.


Aup*_*upr 5

尝试这个:

try {
    Desktop.getDesktop().browse(new URL("https://google.com").toURI());
} catch (IOException e) {
    e.printStackTrace();
} catch (URISyntaxException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

  • 挂在Ubuntu (3认同)

Ale*_*rov 2

似乎无法完成,因为此功能未实现: https: //javafx-jira.kenai.com/browse/RT-210

问题是您将无法启动任何需要 awt-stack 和 jfx 在同一虚拟机中的东西。我们的决定是使用单独的 JVM。只需启动一个单独的虚拟机,并接受通过套接字浏览的命令。

这是一种方式,另一种方式 - 是找到从 java 调用浏览器的任何其他方式 - 这是一项不特定于 javafx-2 的任务,而是特定于 java 的任务。

但开发者添加了评论:

Anthony Petrov 添加了评论 - 2013 年 5 月 17 日 05:09 请注意,FX8 允许 headful AWT 与 FX 在同一虚拟机中运行。所以 AWT API 应该可以工作。