当前位置: 首页 > 知识库问答 >
问题:

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

越胤
2023-03-14

第一次使用JavaFX时,我试图使用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项目出现在下部栏中,正如您在此处看到的:

我知道它是打开的,因为它下面有一个小点,但是我看不到任何窗户。此外,如果不关闭日食本身,我就无法关闭这个“咖啡杯”项目。

编辑:我正在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个答案

孟财
2023-03-14

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

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
蒋曾笑
2023-03-14

问题解决了!问题出在包裹上:javafx-swt.jar

在Eclipse IDE for Mac中,当Java程序引用SWT时,IDE会自动添加VM选项-XstartOnFirstThread。在大多数情况下,这种自动添加是有用的。然而,有一种情况是,添加此VM选项会导致问题,即SWT应用程序的Eclipse项目也包含一个或多个“纯”JavaFX类,这些类不能与SWT类互操作。从这样的Eclipse项目启动的“纯”JavaFX应用程序将挂起,因为它不需要-XstartOnFirstThread。(html" target="_blank">https://docs.oracle.com/javafx/2/swt_interoperability/jfxpub-swt_interoperability.htm)

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

 类似资料:
  • 无法启动应用程序,请查找以下相同的跟踪 注意:同样的应用程序与卡拉巴赫工作,即我能够启动应用程序 我正在使用以下功能:

  • 我已经在tomcat服务器上安装了应用程序。在启动和加载应用程序的过程中,我有以下堆栈跟踪的错误。如何解决这个问题? apache-tomcat-7.0.47/webapps/petclinic 2016年10月27日下午12:14:36 org。阿帕奇。卡塔琳娜。果心标准上下文起始内部 严重:ServletContainerInitializer处理javax时出错。servlet。Servle

  • 比方说我安装了OracleJDK11(只是为了让事情更简单)。然后我下载了Gluon的JavaFX11,并在JDK上解包。实际上,我在哪里解包JavaFX并不重要(因为我的下一个目标是基于OpenJRE制作我自己的JRE安装程序)。然后我尝试启动应用程序: 我得到了这个: 启动层初始化过程中发生错误java.lang.LayerInstantiation异常:包jdk.internal.jrtfs

  • Visual Studio 2022 无法在 docker 上启动 ASP.NET Core 项目,这是我所做的: 开始VS 2022 基于模板"ASP.NETCore Web App"新建项目 在模板配置上,我将dotnet 6和Enable Docker定义为true(Linux,我使用的是Win 11 WSL) 我已经等待vs的容器工具完成,然后点击F5在docker上启动应用程序 错误发布

  • 问题内容: 我有一个使用Spring Boot Actuator的Java后端,但不会在Digitalocean Ubuntu VPS上启动。同一应用程序可以在我的Mac和另一台Ubuntu PC上很好地运行。 它开始初始化,但每次都在同一点停止(无例外,只是挂起)。如果我尝试在此时停止它,它将不会带回外壳。 这是输出: 这是在:之后的输出 有人遇到过同样的问题吗?你们能帮我吗? 这里有线程转储(

  • 我下面介绍了spring的RESTAPI,但我无法让它在tomcat服务器上运行(尝试了tomcat 7和9)。在eclipse中,我确实以- 编辑 尝试在项目上安装mvn,然后java-jarproject.jar 编辑2 我将项目导出到一个可运行的jar(并将所需的库打包到生成的jar中),但是 提供 编辑3 我没有删除我的m2,因为那里有很多东西,但我现在通过eclipse的spring工具