我试图打开从JavaFX的默认系统浏览网页的URL。 我没有找到任何官方文件关于这一点。 任何线索?
编辑:我发现一个教程 ,但它不工作。 我使用的是MacOSX的,我尝试推出
java.awt.Desktop.getDesktop().browse(new URI(url));
但我得到一个HeadlessExcelption
我试图打开从JavaFX的默认系统浏览网页的URL。 我没有找到任何官方文件关于这一点。 任何线索?
编辑:我发现一个教程 ,但它不工作。 我使用的是MacOSX的,我尝试推出
java.awt.Desktop.getDesktop().browse(new URI(url));
但我得到一个HeadlessExcelption
使用hostServices.showDocument(位置) 。
试着将你的应用程序的启动方法如下代码:
getHostServices().showDocument("http://www.yahoo.com");
补充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)
另一种选择是使用ProcessBuilder
:
public static void openWebpage(String url) {
try {
new ProcessBuilder("x-www-browser", url).start();
} catch (IOException e) {
e.printStackTrace();
}
}
您可以使用此选项,如果Desktop.getDesktop().browse(uri)
出于某种原因挂起没有任何错误。
试试这个:
try {
Desktop.getDesktop().browse(new URL("https://google.com").toURI());
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
它不能这样做,似乎,因为这个功能没有实现: 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应该工作。
下面是现场控制器,当按钮被激活内部工作的脚本:
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 {
}
}