2016-08-15 85 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文件的步驟。

相關問題