Javafx 如何从java fx应用程序打开默认系统浏览器?
我正在尝试从javafx在默认系统浏览器中打开一个web url。我没有找到任何关于这方面的官方文件。有线索吗 编辑: 我找到了,但不起作用。 我正在使用MacOsX,我试着启动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,并通过套接字接受浏览命令 这是一
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上