我怎样可以打开一个Java FX应用程序的默认系统浏览器?我怎样可以打开一个Java FX应用程序的

2019-05-11 22:31发布

我试图打开从JavaFX的默认系统浏览网页的URL。 我没有找到任何官方文件关于这一点。 任何线索?

编辑:我发现一个教程 ,但它不工作。 我使用的是MacOSX的,我尝试推出

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

但我得到一个HeadlessExcelption

Answer 1:

使用hostServices.showDocument(位置) 。

试着将你的应用程序的启动方法如下代码:

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


Answer 2:

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



Answer 3:

另一种选择是使用ProcessBuilder

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

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



Answer 4:

试试这个:

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


Answer 5:

它不能这样做,似乎,因为这个功能没有实现: https://javafx-jira.kenai.com/browse/RT-210

这件事是,你将不能够推出什么,有什么需要在同一个虚拟机AWT堆栈和JFX。 的决定 - 是使用一个单独的JVM。 只要启动一个单独的虚拟机,并通过浏览插座接受命令。

这是一种方式,另一种方式 - 是要找到从Java浏览器中调用任何其他方式 - 这不是具体到JavaFX的2任务,但到Java的。

但开发者已经添加了一条评论:

安东尼彼得罗夫添加评论 - 五月,17 2013下午5时09分请注意,FX8允许headful AWT在同一个虚拟机与FX运行。 因此,AWT API应该工作。



Answer 6:

下面是现场控制器,当按钮被激活内部工作的脚本:

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 {

    }
}


文章来源: How can I open the default system browser from a java fx application?