NoClassDefFoundError:javafx / beans / InvalidationListener

时间:2013-12-13 19:54:43

标签: java jar javafx classpath

运行程序时出现以下错误。

NoClassDefFoundError: javafx/beans/InvalidationListener

命令行如下

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

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

它想要什么?

2 个答案:

答案 0 :(得分:2)

来自Java manual

  

<强> -jar         使用此选项时,JAR文件是所有用户类的源,并忽略其他用户类路径设置。

当您提供-jar-cp个参数时,您提供的自定义类路径将被完全忽略。

对于Java 7,JavaFX不在默认的类路径中。对于在Java 7上运行的独立JavaFX应用程序jar,您必须使用JavaFX deployment tools或第三方mavengradle插件打包jar。此类打包工具将JavaFX查找代码插入到打包的jar中,以便在系统上找到合适的JavaFX版本。

如果您只使用Oracle Java 8而不是使用Java 7,那么一切都会简单得多.Wth Oracle Java 8,Java在默认的类路径中,因此当您使用java -jar运行JavaFX应用程序jar时,它只会工作。

答案 1 :(得分:0)

NoClassDefFoundError:如果Java虚拟机尝试加载类的定义并且找不到类的定义,则抛出该文件。