繁体   English   中英

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

[英]Cannot launch a JavaFX Application on MacOS (using Java 8)

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

我在具有Mojave 10.14.5的MacOS上将Java 8(更新211)与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项目:

图像菜单栏

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

编辑:我正在从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')

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

Oracle的Java8(适用于Mac)已经包含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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM