是否存在阻止 JavaFX 在虚拟化 OS X 环境中运行的已知不兼容性?

Posted

技术标签:

【中文标题】是否存在阻止 JavaFX 在虚拟化 OS X 环境中运行的已知不兼容性?【英文标题】:Are there known incompatibilities that prevent JavaFX from running in a virtualized OS X environment? 【发布时间】:2015-06-21 15:11:11 【问题描述】:

问题描述

我一直试图在虚拟化 OS X 安装中运行一个简单的 JavaFX 应用程序,但没有成功。当在 OS X 主机系统上本地启动时,一切都按预期工作。

根据我的研究,其他人也偶然发现了这个问题,但建议的解决方案似乎都不起作用:

使用 VirtualBox 而不是 VMware Fusion 作为虚拟化工具,因为“VMware 不是经过认证的管理程序”(请参阅​​ this question 和 the official specs) 我已在虚拟机设置中激活/停用 3D 硬件加速支持。

到目前为止,我最好的方法是提示 Java VM 用 PRISM 软件渲染引擎替换 PRISM 硬件 3D 渲染引擎(通过使用 -Dprism.order=sw,请参阅 this question)。

使用硬件渲染引擎时,JafaFX 应用程序崩溃。使用软件渲染引擎时,JavaFX 应用程序启动良好,但根本不显示任何 UI 元素。

我正在使用 JavaFX“Hello World”应用程序,它在选择“New Project...”->“Java FX Application”时由 IntelliJ IDEA 生成,并添加了一个简单的文本标签(参见下面的代码)。

要从命令行运行 JavaFX 应用程序,我正在调用:

java -Dprism.order=sw -jar path/to/JavaFXApp.jar

错误信息

JVM 记录到命令行的唯一错误(即使在详细模式下)是

CGLCreateContext error: 10002

在主机系统上成功运行时不会记录此错误。

我的规格

IntelliJ IDEA 14.1.1 JDK 1.8.0_40 OS X 10.9.5(主机操作系统) OS X 10.10.3(来宾操作系统) Vmware Fusion Professional 7.1.1 VirtualBox 4.3.26

示例代码

Main.java

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application 

    @Override
    public void start(Stage primaryStage) throws Exception
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    

    public static void main(String[] args) 
        launch(args);
    

Controller.java

package sample;

public class Controller 

sample.fxml

<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Label?>

<GridPane fx:controller="sample.Controller"
          xmlns:fx="http://javafx.com/fxml" 
          alignment="center" 
          hgap="10" vgap="10">
    <children>
        <Label text="This is a 'javafx.scene.control.Label'" />
    </children>
</GridPane>

【问题讨论】:

我在使用 Parallels 运行时遇到了类似的问题。 【参考方案1】:

同样的问题。根据多个报告,这是 JVM 中的一个错误。

https://bugs.openjdk.java.net/browse/JDK-8096072

【讨论】:

【参考方案2】:

这不是错误。

https://bugs.openjdk.java.net/browse/JDK-8154148

这更像是一个 Mac OS X 限制,它阻止 JDK 在 VM Ware 管理程序下运行。

我的应用程序遇到了同样的问题,并尝试在 Oracle VirtualBox 下运行它,但没有成功。但是,在真实设备上,我的应用运行良好。

所以,我想购买硬件是唯一的选择:)

【讨论】:

以上是关于是否存在阻止 JavaFX 在虚拟化 OS X 环境中运行的已知不兼容性?的主要内容,如果未能解决你的问题,请参考以下文章

判断一个单链表是否存在环

JavaFX 本机捆绑图标 OS X

如何在 Mac OS X 上创建虚拟文件?

有没有办法阻止 iTunes 商店 URL 在 OS X 中启动 iTunes 应用程序?

单链表 --- 环相关问题(是否存在环是否相交)

判断无向图/有向图中是否存在环