我导出了一个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);
}
}
}
答案 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>`
将此添加到您的依赖项中。
答案 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”启动应用程序,并且运行良好。
有人对此行为有解释吗?