init方法中的exception – JavaFX

在使用eclipse导出到.jar文件后,我得到了这个exception。 IntelliJ说的一样。 但我的程序在日食中运行良好。

Exception in thread "main" java.lang.NoClassDefFoundError: javafx/application/Application at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) Caused by: java.lang.ClassNotFoundException: javafx.application.Application at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 13 more 

这可能是什么问题?

JDK版本:1.7.0_79开始:java -jar myapp.jar

用java -cp jfxrt.jar -jar myapp.jar尝试后,它给了我以下错误:

 java -cp jfxrt.jar -jar memo.jar Exception in thread "JavaFX Application Thread" Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Layout at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at com.sun.javafx.application.LauncherImpl.lambda$launchApplicationWithArgs$100(LauncherImpl.java:352) at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$119(PlatformImpl.java:326) at com.sun.javafx.application.PlatformImpl.lambda$null$117(PlatformImpl.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$118(PlatformImpl.java:294) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) at com.sun.glass.ui.gtk.GtkApplication.lambda$null$450(GtkApplication.java:139) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Layout at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 11 more java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) Caused by: java.lang.NullPointerException at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:383) at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) ... 5 more 

javafx.application.Application类将在javafx库中找到; 在诸如eclipse之类的IDE中,您通常会将项目配置为引用编译和执行所需的库。 将代码放入jar并在IDE外部运行时,需要以不同的方式向运行时提供库。

执行此操作的标准方法是设置一个类路径,该类路径既可以引用应用程序jar,也可以引用它所需的任何库; 用于执行此操作的DOS命令将类似于:

 set classpath=c:\myProjects\myApplication\myJar.jar;c:\java\libaries\javafx\jfxrt.jar 

然后java可以访问这两个jar文件中的类

从版本1.8开始,Oracle JDK在类路径中包含JavaFX; 如果您将JDK升级到版本8或更高版本,它应该运行。 我不建议使用Java 8之前的版本构建生产级JavaFX应用程序。

如果你确实想要使用Java 7,可以考虑使用内置的JavaFX部署工具来构建jar,而不是使用eclipse中的vanilla“create executable jar”。 如果需要,这些将正确构建包含FX运行时的jar文件。 在Eclipse中执行此操作的最简单方法是安装e(fx)clipse (Eclipse插件); 有一个教程 ,其中包括构建jar文件的步骤。