无法在MacOS上启动JavaFX应用程序(使用Java 8)

时间:2019-06-26 15:21:05

标签: java eclipse macos javafx

第一次使用JavaFX,我正在尝试使用Hello World!窗口对其进行测试。

我在装有Mojave 10.14.5的MacOS上使用Java 8(更新211)和Eclipse。

我正在从事这个项目:

image eclipse

我将所有我认为需要的JavaFX jar放入了构建路径(也许我缺少了一些jar?)。

我正在尝试使用以下代码使用JavaFX打开窗口:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Test extends Application{
    public static void main(final String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

该代码应该很好,因为它可以在Windows和Linux上使用。

当我运行它时,下面的栏中会显示一个Java项目:

image menu bar

我知道它已打开,因为它下面有一个小圆点,但我看不到任何窗口。而且,如果不关闭月食本身,就无法关闭“咖啡”项目。

编辑: 我正在从IDE(Eclipse 4.9.0)运行它。使用Oracle的Java 8(211)。我自己添加了引用的库,如果我尝试删除它们而将导入留在代码中,则会出现此错误:

Access restriction: The type 'Application' is not API (restriction on required library '/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/jfxrt.jar')

2 个答案:

答案 0 :(得分:0)

您的配置无法以这种方式工作。您没有提供足够的详细信息来给出确定的答案,但这是一些问题:

Oracle(适用于Mac)的Java8已经包含JavaFX,因此您添加的库要么不再需要,要么很可能使VM混乱。

如果您的Java是不包含JavaFX的OpenJDK 8,则您添加的库也无用,因为它们看起来像Java 11或更高版本的库,并且与Java 8不兼容。

请在这里查找适合您的环境的正确设置:https://openjfx.io/openjfx-docs/

将这两行代码添加到您的main方法中,以找出您在运行时实际使用的Java和JavaFX版本。

System.out.println("java.runtime.version: " + System.getProperty("java.runtime.version", "(undefined)"));
System.out.println("javafx.version: " + System.getProperty("javafx.version", "(undefined)"));

输出应如下所示:

java.runtime.version: 1.8.0_212-b10
javafx.version: 8.0.212

答案 1 :(得分:0)

问题解决了!问题出在以下软件包:javafx-swt.jar

  

在Mac的Eclipse IDE中,当Java程序引用SWT时,   IDE自动添加VM选项-XstartOnFirstThread。多数情况   在这种情况下,这种自动添加是有帮助的。但是,有一种情况   添加此VM选项时会导致问题,即Eclipse   SWT应用程序的项目,其中还包含一个或多个“纯”   不与SWT类互操作的JavaFX类。一个“纯”的   从这样的Eclipse项目启动的JavaFX应用程序将   挂起,因为它不希望使用-XstartOnFirstThread。   (https://docs.oracle.com/javafx/2/swt_interoperability/jfxpub-swt_interoperability.htm

在“运行配置”的“参数”选项卡中,您可以找到一个复选框,要求不要使用-XstartOnFirstThread。取消选中它即可。