【问题标题】:Error: Could not find or load main class application.Main Caused by: java.lang.NoClassDefFoundError: javafx/application/Application JDK 11错误:无法找到或加载主类 application.Main 原因:java.lang.NoClassDefFoundError: javafx/application/Application JDK 11
【发布时间】:2019-04-18 13:11:33
【问题描述】:

我遇到了一个非常基本的问题。我使用 JavaFX 创建了一个简单的 hello world 程序,它在 JDK 1.8 上运行良好。但是当我切换到 JDK-11 时,它会抛出以下异常:

Error: Could not find or load main class application.Main
Caused by: java.lang.NoClassDefFoundError: javafx/application/Application

以下是我在eclipse中写的代码

package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;


public class Main extends Application {

    private Scene theScene;
    @Override
    public void start(Stage primaryStage) {
try {

            FXMLLoader loader = new FXMLLoader(getClass().getResource("MyScene.fxml"));
            Parent mainPane = loader.load();


            theScene = new Scene(mainPane);
            primaryStage.setScene(theScene);
            primaryStage.show();

        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public void setTheScene(Scene theScene) {
        this.theScene = theScene;
    }

    public static void main(String[] args) {
        launch(args);
    }
}

【问题讨论】:

  • 你在哪里以及如何运行它(在 eclipse/Intellij 中,作为 JAR 等)?
  • 我正在使用“java -jar myapp.jar”运行 jar 文件
  • 你是如何构建 jar 的?
  • Java 11 不包含 JavaFX 11,但这并不意味着它不支持它。您可以运行 JavaFX 11 应用程序,并且有一个入门指南here

标签: java javafx java-11


【解决方案1】:

我在执行 java 应用程序时遇到了类似的错误,我找不到一些已经安装的包,我找到了应用程序正在读取的路径,并在那里添加了一个指向我已安装的 javafx 库的符号链接。

例子:

user@server:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib$ sudo ln -s /usr/share/openjfx/lib/javafx.properties

【讨论】:

    【解决方案2】:

    在 Eclipse 中:运行配置 -> 参数 -> VM 参数:

    --module-path ${project_classpath:REPLACE_ME_WITH_YOUR_PROJECT_NAME} 
    
    --add-modules javafx.controls,javafx.fxml
    

    【讨论】:

      【解决方案3】:

      从stretch升级到buster后,我在debian上遇到了同样的问题,但现在一切都很好:

      java --version
      

      openjdk 11.0.4 2019-07-16

      要使用终端运行 java-fx 应用程序,请执行以下步骤:

      1. 安装 openjfx(如果尚未安装):
        sudo apt install openjfx

      2. 列出 javafx 库位置:
        dpkg-query -L openjfx
        输出应该是这样的:

      。 /usr /usr/共享 /usr/share/doc /usr/share/doc/openjfx /usr/share/doc/openjfx/TODO.Debian /usr/share/doc/openjfx/changelog.Debian.gz /usr/share/doc/openjfx/版权 /usr/share/openjfx /usr/share/openjfx/lib /usr/share/openjfx/lib/javafx.properties /usr/share/openjfx/lib/javafx.base.jar /usr/share/openjfx/lib/javafx.controls.jar /usr/share/openjfx/lib/javafx.fxml.jar /usr/share/openjfx/lib/javafx.graphics.jar /usr/share/openjfx/lib/javafx.media.jar /usr/share/openjfx/lib/javafx.swing.jar /usr/share/openjfx/lib/javafx.web.jar

      1. 运行 jar 应用程序通过包含 javafx 路径和模块
        java --module-path $PATH_TO_OPENJFX-LIB --add-modules module_1,module_2,module_3,...,module_n -jar $PATH_TO_JAR_FILE

      示例:

      java --module-path /usr/share/openjfx/lib --add-modules=javafx.controls,javafx.fxml,javafx.base,javafx.media,javafx.web,javafx.swing -jar '/home/lotfi/Documents/MyAppfolder/my_application.jar'
      

      【讨论】:

        【解决方案4】:

        jdk 11 不支持 javafx。甲骨文将其删除。 但是您可以使用 Maven 将 javafx 添加到您的项目中。

        【讨论】:

        • 是的,OpenFX 建议从 Java 9 开始使用您的应用程序(在应用程序 jar 中)构建它。
        猜你喜欢
        • 2022-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-15
        • 2013-05-27
        • 1970-01-01
        • 2022-06-17
        • 1970-01-01
        相关资源
        最近更新 更多