我正在尝试在javafx的默认系统浏览器中打开一个网址。我没有找到任何关于此的官方文件。任何线索?
编辑: 我找到a tutorial但它不起作用。 我正在使用MacOsX,我尝试启动
java.awt.Desktop.getDesktop().browse(new URI(url));
但我得到HeadlessExcelption
答案 0 :(得分:42)
使用hostServices.showDocument(location)。
尝试将以下代码放在应用程序的启动方法中:
getHostServices().showDocument("http://www.yahoo.com");
答案 1 :(得分:14)
补充jewelsea的回答,如果您不知道如何调用getHostServices(),请在主要课程中尝试:
HostServicesDelegate hostServices = HostServicesFactory.getInstance(this);
hostServices.showDocument(WEBSITE);
答案 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 {
}
}