JDK15环境运行JavaFX项目报NoClassDefFoundError问题咨询
问题结论
该报错和FXML的xmlns版本没有任何关系,是启动命令的两处配置错误导致的,直接按下方步骤修改即可解决。
错误原因&修复方案
1. 主类全限定名配置错误
你贴出的主类代码中,包声明为package sample;,主类全限定名是sample.Main,但你的启动命令末尾指定的启动类是application.Main,系统自然找不到目标主类。
修复方法:把启动命令最后面的
application.Main修改为sample.Main即可解决第一个Could not find or load main class sample.Main报错。
2. JavaFX依赖重复配置冲突
JavaFX 11及以后版本为独立模块,你已经通过--module-path指定了JavaFX SDK的库路径,同时通过--add-modules声明了需要引入的JavaFX模块,不需要再把JavaFX的jar包手动添加到-classpath参数中,重复配置会导致模块加载失败,触发NoClassDefFoundError: javafx/application/Application报错。
修复方法:把-classpath参数里所有
D:\javafx\javafx-sdk-15.0.1\lib\开头的jar包引用全部删除,只保留项目编译输出路径和第三方依赖(你这里剩下的就是C:\Users\anasr\eclipse-workspace\DataStructuresAlgo1-CA1-master\bin;C:\Users\anasr\eclipse-workspace\DataStructuresAlgo1-CA1-master\lib\xstream-1.4.10.jar)即可。
补充:FXML xmlns版本调整方法
如果后续你遇到FXML解析相关的报错需要调整xmlns版本,直接修改FXML文件根节点的对应属性即可:
- JavaFX 15对应的标准命名空间为
http://javafx.com/javafx/15.0.1 - fx前缀的命名空间固定为
http://javafx.com/fxml/1
xmlns版本不需要和JDK版本完全对齐,只要大版本匹配就能正常运行。
内容的提问来源于stack exchange,提问作者ctr1L

