2016-08-15 17 views
0

在使用eclipse导出到.jar文件后,我得到此异常。 IntelliJ说同样的。但是我的程序在日食中运行良好。init方法中的异常 - JavaFX

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的罐子myapp.jar

与Java尝试它后-cp jfxrt.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 
+0

看起来像一个类路径问题。你如何启动你的应用程序? – bradimus

+0

@brad通过控制台命令:'java -jar myapp.jar' – Eric

+0

您使用哪个JDK版本来运行它? –

回答

0

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文件

+0

JavaFX从JDK 1.7.0_06到JDK 8位于'jre'的'lib'子目录之前的标准位置。从JDK 8(对于Oracle JDK)它被移动到'lib/ext'中(所以默认情况下是在类路径中)。 –

0

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

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

相关问题