运行程序时出现以下错误。
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
它想要什么?
答案 0 :(得分:2)
来自Java manual:
<强> -jar 强> 使用此选项时,JAR文件是所有用户类的源,并忽略其他用户类路径设置。
当您提供-jar
和-cp
个参数时,您提供的自定义类路径将被完全忽略。
对于Java 7,JavaFX不在默认的类路径中。对于在Java 7上运行的独立JavaFX应用程序jar,您必须使用JavaFX deployment tools或第三方maven或gradle插件打包jar。此类打包工具将JavaFX查找代码插入到打包的jar中,以便在系统上找到合适的JavaFX版本。
如果您只使用Oracle Java 8而不是使用Java 7,那么一切都会简单得多.Wth Oracle Java 8,Java在默认的类路径中,因此当您使用java -jar
运行JavaFX应用程序jar时,它只会工作。
答案 1 :(得分:0)
NoClassDefFoundError:如果Java虚拟机尝试加载类的定义并且找不到类的定义,则抛出该文件。