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

Dir*_*irk 6 crash macos javafx virtual-machine

问题描述

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

在我的研究之后,其他人也偶然发现了这个问题,但是没有一个建议的解决方案似乎有效:

  • 使用VirtualBox而不是VMware Fusion作为虚拟化工具,因为"VMware不是经过认证的虚拟机管理程序"(请参阅此问题官方规范)
  • 我在虚拟机的设置中激活/停用了3D硬件加速支持.

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

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

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

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

java -Dprism.order=sw -jar path/to/JavaFXApp.jar
Run Code Online (Sandbox Code Playgroud)

错误信息

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

CGLCreateContext error: 10002
Run Code Online (Sandbox Code Playgroud)

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

我的规格

  • 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Controller.java:

package sample;

public class Controller {
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

小智 0

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

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