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

时间:2013-05-17 08:08:17

标签: javafx javafx-2

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

编辑: 我找到a tutorial但它不起作用。 我正在使用MacOsX,我尝试启动

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

但我得到HeadlessExcelption

6 个答案:

答案 0 :(得分:42)

使用hostServices.showDocument(location)

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

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

答案 1 :(得分:14)

补充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)

答案 2 :(得分:8)

另一种选择是使用ProcessBuilder

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

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

答案 3 :(得分:4)

试试这个:

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

答案 4 :(得分:2)

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

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

这是一种方式,另一种方式 - 是从java中找到任何其他浏览器调用方式 - 这是一个不是javafx-2特有的任务,而是根本不是java。

但开发者已添加评论:

Anthony Petrov添加了评论 - 2013年5月17日05:09 PM 请注意,FX8允许头部AWT在与FX相同的VM中运行。所以AWT API应该可以工作。

答案 5 :(得分:1)

当激活按钮时,这是一个在场景控制器内部工作的脚本:

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 {

    }
}