有没有一种方法可以调试为什么JavaFX-Project的可执行JAR在我的计算机上运行而不在其他计算机上运行? (使用jdk 1.8._051)

时间:2019-05-28 16:29:25

标签: java javafx jar runnable-jar

我导出了一个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 个答案:

答案 0 :(得分:3)

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

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

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);
}

答案 1 :(得分: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/

答案 2 :(得分: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>

答案 3 :(得分:0)

我知道了: 指向JDK10 bin的是User Path变量。

我们更改了路径。现在,它可以与“ java -jar programm.jar”一起使用 但不能使用“ java programm.jar”

,但不能定期单击文件。但是我们编写了一个batchFile,它使用“ java -jar”启动应用程序,并且运行良好。

有人对此行为有解释吗?