0

我导出了一个 JavaFX2 项目的 Jar。它工作正常,但是当我在另一台机器上运行它时会有一个 classDefNotFoundExeption: javafx.application.Application

任何提示如何解决这个问题?

这是我的清单:

Class-Path: .
Main-Class: proj.view.Launcher

我还编写了启动器,以在找不到 JavaFX 的情况下启动 Swing GUI。

这是我的启动器类


public class Launcher {

    public static void main(String[] args) {

        try {

            Class c = javafx.application.Application.class;
            proj.main.App.main(args);


        }catch (NoClassDefFoundError e) {
            String[] t = {"Swing Backup","Application start Error"};
            MainFrame.remote(t);


        }

    }

}


4

4 回答 4

3

其他计算机在不包含 JavaFX 的 Java 安装上运行。它可以在您的机器上运行,因为您确实安装了 JavaFX。

要测试是否javafx.application.Application可用,您需要使用反射,即

boolean hasJavaFX;
try {
    Class.forName("javafx.application.Application");
    hasJavaFX = true;
} catch (ClassNotFoundException e) {
    hasJavaFX = false;
}
if (hasJavaFX) {
    MainFrame.remote(new String[] {"Swing Backup","Application start Error"});
} else {
    proj.main.App.main(args);
}
于 2019-05-28T16:52:32.810 回答
0

我想通了:这是指向 JDK10 bin 的用户路径变量。

我们改变了路径。现在它适用于“java -jar programm.jar”,但不适用于“java programm.jar”

但不是通过常规单击文件。但是我们编写了一个使用“java -jar”启动应用程序的批处理文件,它工作正常。

有没有人解释这种行为?

于 2019-05-30T13:07:15.530 回答
0

对我来说,如果相同的代码在这些机器上通过 IDE 运行,它看起来像是可运行的 jar 问题。您可以尝试使用 maven 程序集插件来打包您的 jar。

Apache Maven Assembly Plugin 允许用户将项目输出及其依赖项、模块、站点文档和其他文件聚合到一个可运行的包中。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
                <archive>
                <manifest>
                    <mainClass>
                        package.your_main_class
                    </mainClass>
                </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </execution>
    </executions>
</plugin>
于 2019-05-28T17:48:13.810 回答
0

当您在 jdk 高于 11 的机器上运行时,您可能会得到classDefNotFoundExeption: javafx.application.Application 。

oracle 已经从 JDK 11 中删除了 javaFX,因此需要提供对 javafx-controls 模块的依赖。

`<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>12-ea+9</version>
</dependency>`

将此添加到您的依赖项中。

https://openjfx.io/

于 2019-05-28T17:01:52.673 回答