2013-12-13 38 views
2

運行程序時出現以下錯誤。NoClassDefFoundError:javafx/beans/InvalidationListener

NoClassDefFoundError: javafx/beans/InvalidationListener 

命令行如下

java -cp "%JAVA_HOME%\lib\jfxrt.jar" -jar MyProgram.jar 

罐存在:

>dir "%JAVA_HOME%\lib\*.jar" 
Volume in drive C is SYS 
Volume Serial Number is 2CD4-0B40 

Directory of C:\Program Files\Java\jdk1.7.0_40\jre\lib 

04.10.2013 01:32   172 765 alt-rt.jar 
04.10.2013 01:32   3 605 930 charsets.jar 
04.10.2013 01:32   4 374 572 deploy.jar 
04.10.2013 01:32   890 363 javaws.jar 
04.10.2013 01:32   109 196 jce.jar 
04.10.2013 01:32   532 559 jfr.jar 
04.10.2013 01:32  15 106 233 jfxrt.jar 
04.10.2013 01:32   581 198 jsse.jar 
04.10.2013 01:32    385 management-agent.jar 
04.10.2013 01:32   1 921 341 plugin.jar 
04.10.2013 01:32   2 448 362 resources.jar 
04.10.2013 01:32  59 966 803 rt.jar 
       12 File(s)  89 709 707 bytes 
       0 Dir(s) 43 361 476 608 bytes free 

裏面的文件存在

>jar tf "%JAVA_HOME%\lib\jfxrt.jar" | D:\APPS\cygwin\bin\grep InvalidationListener 
com/sun/javafx/fxml/BeanAdapter$PropertyInvalidationListener.class 
javafx/beans/InvalidationListener.class 
javafx/beans/WeakInvalidationListener.class 
javafx/scene/media/MediaView$MediaErrorInvalidationListener.class 

它想什麼?

+0

請顯示你的代碼,你在哪裏得到錯誤。 –

+3

你有任何META-INF裏面的jar文件嗎? – kosa

回答

0

NoClassDefFoundError:如果Java虛擬機嘗試加載類的定義並且沒有找到該類的定義,則拋出該錯誤。

2

Java manual

-jar When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.

當您提供既-jar-cp參數,您提供的定製類路徑中完全被忽略。

對於Java 7,JavaFX不在默認的類路徑上。對於獨立的JavaFX應用程序jar來使用Java 7,您必須使用JavaFX deployment tools或第三方mavengradle插件打包該jar。這些打包工具將JavaFX查找代碼插入打包的jar中以在系統上找到合適的JavaFX版本。

一切都簡單了很多,如果你只是用​​,而不是使用Java 7問心無愧甲骨文的Java 8,Java是在默認的類路徑中,所以當你運行使用java -jar JavaFX應用程序罐子,都可以正常運行。