Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在MacOS上启动JavaFX应用程序(使用Java 8)_Java_Eclipse_Macos_Javafx - Fatal编程技术网

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

无法在MacOS上启动JavaFX应用程序(使用Java 8),java,eclipse,macos,javafx,Java,Eclipse,Macos,Javafx,第一次使用JavaFX时,我试图用一个helloworld来测试它窗口 我正在Mojave10.14.5的MacOS上使用Java8(更新211)和Eclipse 我正在做这个项目: 我将我认为需要的所有javafxjar放在构建路径中(也许我缺少一些jar?) 我正在尝试使用以下代码使用JavaFX打开一个窗口: import javafx.application.Application; import javafx.event.ActionEvent; import javafx.even

第一次使用JavaFX时,我试图用一个
helloworld来测试它窗口

我正在Mojave10.14.5的MacOS上使用Java8(更新211)和Eclipse

我正在做这个项目:

我将我认为需要的所有javafxjar放在构建路径中(也许我缺少一些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();
    }
}

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

Oracle的Java8(用于Mac)已经包含了JavaFX,因此您添加的库不是不需要,就是更可能混淆了VM

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

请查看此处以找到适合您的环境的正确设置:

将这两行代码添加到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

在EclipseIDEforMac中,当Java程序引用SWT时 IDE自动添加VM选项-XstartOnFirstThread。大多数 在某些情况下,这种自动添加是有帮助的。然而,有一种情况 添加此VM选项时会导致问题,即Eclipse SWT应用程序的项目,其中还包括一个或多个“纯” 不与SWT类互操作的JavaFX类。“纯粹的” 从这样一个Eclipse项目启动的JavaFX应用程序将 挂起,因为它不需要-XstartOnFirstThread。 ()


在运行配置的Arguments选项卡中,您可以找到一个复选框,要求不要使用-XstartOnFirstThread。取消选中它,它会工作。

您是从ide还是从命令行运行它?JavaFX是Java8的一部分。是您自己添加引用的库,还是Eclipse自动添加它们?您使用的是什么java实现?是甲骨文的吗?您使用的是哪一个Eclipse版本?代码在相同OS和JRE版本的命令行中正确运行。我在IDE(Eclipse 4.9.0)中运行它。使用OracleJava8(211)我使用的是Oracle的Java8,如果我试图删除我在后期编辑中输入的错误库,我希望使用Java8而不升级到Java12,我已经更新了上面的答案。看来你已经破坏了你的系统设置。您的代码使用Oracle Java 8在我的Mac上运行得很好。谢谢,我尝试将println放在main中(在启动方法之前),但它不打印任何内容是的,但我给您的上面的链接中也记录了这一点。(3.添加VM参数。警告:确保未选中选项:使用SWT启动时使用-XstartOnFirstThread参数。)
java.runtime.version: 1.8.0_212-b10
javafx.version: 8.0.212