【问题标题】:Missing JavaFX application class com.MainApp缺少 JavaFX 应用程序类 com.MainApp
【发布时间】:2020-03-13 17:56:42
【问题描述】:

我正在尝试从 java-1.8 迁移到 java-11.. 我遇到了错误“缺少 JavaFX 应用程序类 com.MainApp”,我在网上寻找解决方案并找到了其中的几个:

https://openjfx.io/openjfx-docs/#modular

Maven JavaFx project compiles but running from console give "Missing JavaFX application class" error msg

上面的做法是“新建一个主类,调用扩展应用的类的主方法”

但是,我仍然面临以下问题:

我通过命令行运行它并使用以下命令:

1.Java -jar abc.jar

线程“main”中的异常 java.lang.NoClassDefFoundError: javafx/application/Application 在 java.base/java.lang.ClassLoader.defineClass1(本机方法) 在 java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016) 在 java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) 在 java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802) 在 java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700) 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623) 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) 在 com.amx.rms.transporter.tools.config.MainDivert.main(MainDivert.java:7) 引起:java.lang.ClassNotFoundException:javafx.application.Application 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 10 更多

2.java --module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" --add-modules=javafx.controls,javafx.fxml,javafx.base ,javafx.media,javafx.web,javafx.swing -jar abc.jar

线程“main”中的异常 java.lang.NoClassDefFoundError: ch/qos/logback/core/Context 在 com.amx.rms.transporter.tools.config.MainDivert.main(MainDivert.java:7) 引起:java.lang.ClassNotFoundException:ch.qos.logback.core.Context 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 1 更多

下面是我的新主类:

public class MainDivert {

    public static void main(String[] args) throws Exception {
        try {
            MainApp.main(args);
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }
}

不确定我错过了什么?

【问题讨论】:

    标签: gradle javafx java-11 openjfx


    【解决方案1】:

    您的第二种方法看起来很有希望。您已经设法添加了 JavaFX 模块。所以这行得通。 看来,您还依赖于其他几个库,例如 logback。您还必须将它们添加到类路径(或模块路径)中。

    Gradle 实际上可以为您管理所有依赖项。您可以使用gradle run 启动您的应用程序。见https://openjfx.io/openjfx-docs/#gradle

    如果要从命令行运行 jar,则必须手动列出类路径(模块路径)中的所有依赖项。这可能会很痛苦。

    【讨论】:

      猜你喜欢
      • 2017-01-11
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-21
      • 2017-07-17
      • 1970-01-01
      相关资源
      最近更新 更多