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

Javafx 如何从java fx应用程序打开默认系统浏览器?,javafx,javafx-2,Javafx,Javafx 2,我正在尝试从javafx在默认系统浏览器中打开一个web url。我没有找到任何关于这方面的官方文件。有线索吗 编辑: 我找到了,但不起作用。 我正在使用MacOsX,我试着启动 java.awt.Desktop.getDesktop().browse(new URI(url)); 但是我得到了一个无头超人选项似乎无法完成,因为该功能未实现: 问题是,您将无法启动任何需要awt堆栈和jfx在同一个VM中的东西。决定是使用一个单独的JVM。只需启动一个单独的VM,并通过套接字接受浏览命令 这是一

我正在尝试从javafx在默认系统浏览器中打开一个web url。我没有找到任何关于这方面的官方文件。有线索吗

编辑: 我找到了,但不起作用。 我正在使用MacOsX,我试着启动

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

但是我得到了一个
无头超人选项

似乎无法完成,因为该功能未实现:

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

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

但开发商添加了一条评论:

安东尼·彼得罗夫(Anthony Petrov)补充了一条评论——2013年5月17日下午5:09 请注意,FX8允许headful AWT与FX在同一个VM中运行。因此AWTAPI应该可以工作。

使用

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

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

补充jewelsea的答案,如果您不知道如何调用getHostServices(),请在主类中尝试以下操作:

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

另一个选项是使用
ProcessBuilder

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

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

以下是一个脚本,在激活按钮时在场景控制器内工作:

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 {

    }
}
试试这个:

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

这太可怕了:|谢谢。我必须将内容加载到应用程序中,还是让用户复制粘贴URL?这是一个应用程序,JavaFX=)中有webView,您可以直接在应用程序中加载站点。请注意,HostServicesDelegate等类不是公开文档化的JavaFX API的一部分,在以后的Java版本(如Java 9)中可能不可用。从其他类调用此方法如何?我在不同的
fxml控制器类中有按钮,这些按钮需要在某些网站中打开默认浏览器,我可以做什么:)?在大多数情况下,您可以向调用
getHostServices()
的子类添加静态访问器。如果您不希望使用静态方法,并且希望在多个应用程序中使用FXML控制器(例如,它们是独立于任何应用程序的库控件),则需要通过。我得到一个
java.lang.Exception:找不到web浏览器
:/Worked for me。我把它放在这个if(Desktop.isDesktopSupported()){…}中,如果系统没有桌面,它就不会尝试。。。挂在Ubuntu上