利用javaFx编程时引入第三方jar包,用SceneBuilder打开对应fxml文件报错时各种原因汇总

javafx可以说是java官方为了弥补java swing在java图形化编程上的痛点而开发的另一种图形化界面编程方式。
利用javaFx结合图形化编程工具Scene
Builder
(官网:https://www.oracle.com/java/technologies/javafxscenebuilder-1x-archive-downloads.html)进行编程可以快速提高效率。

以往我在使用Scene Builder时都是在项目中对应的fxml页面右键选择“open in Scene Builder”,即可跳转到Scene Builder中进行页面展示。(如下图)
对应fxml文件右键选择

打开后情况

最近我在学习一个javaFx项目时想要这样打开Scene Builder进行页面图形化展示时却报错了(项目是可以正常运行的,打开Scene Builder却会报错)
在这里插入图片描述
具体报错信息为

java.io.IOException: javafx.fxml.LoadException: 
/D:/*******/group_type_management.fxml

	at com.oracle.javafx.scenebuilder.kit.fxom.FXOMLoader.load(FXOMLoader.java:98)
	at com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument.<init>(FXOMDocument.java:89)
	at com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument.<init>(FXOMDocument.java:106)
	at com.oracle.javafx.scenebuilder.kit.editor.EditorController.updateFxomDocument(EditorController.java:2540)
	at com.oracle.javafx.scenebuilder.kit.editor.EditorController.setFxmlTextAndLocation(EditorController.java:761)
	at com.oracle.javafx.scenebuilder.app.DocumentWindowController.loadFromFile(DocumentWindowController.java:385)
	at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.performOpenFiles(SceneBuilderApp.java:672)
	at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.access$100(SceneBuilderApp.java:98)
	at com.oracle.javafx.scenebuilder.app.SceneBuilderApp$1.invalidated(SceneBuilderApp.java:524)
	at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:137)
	at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
	at javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:72)
	at javafx.beans.property.ReadOnlyBooleanWrapper.fireValueChangedEvent(ReadOnlyBooleanWrapper.java:103)
	at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110)
	at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:144)
	at com.oracle.javafx.scenebuilder.kit.library.user.UserLibrary.lambda$updateFirstExplorationCompleted$6(UserLibrary.java:352)
	at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
	at java.lang.Thread.run(Thread.java:748)
Caused by: javafx.fxml.LoadException: 
/D:/Coding/RS/cityRsProject/falsework-client/src/main/resources/fxml/admin/groupType/group_type_management.fxml

	at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
	at javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2848)
	at javafx.fxml.FXMLLoader.processImport(FXMLLoader.java:2692)
	at javafx.fxml.FXMLLoader.processProcessingInstruction(FXMLLoader.java:2661)
	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2517)
	at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2425)
	at com.oracle.javafx.scenebuilder.kit.fxom.FXOMLoader.load(FXOMLoader.java:93)
	... 22 more
Caused by: java.lang.ClassNotFoundException: com.jfoenix.controls.JFXButton
	at java.lang.ClassLoader.findClass(ClassLoader.java:530)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at javafx.fxml.FXMLLoader.loadTypeForPackage(FXMLLoader.java:2916)
	at javafx.fxml.FXMLLoader.loadType(FXMLLoader.java:2905)
	at javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2846)
	... 27 more

通过分析可得报错的原因是因为Scene Builder里面的相关组件缺失导致不能正常打开,原来Scene Builder里面的组件代码和JDK或其他jar包里的组件代码是独立的,Scene Builder里面缺失相关组件代码就会产生项目能运行,在Scene Builder却打不开的情况。

通过一波网上冲浪,汇总了类似问题的各种具体的原因和解决办法如下:

  1. JDK版本问题
    openJDK阉割了javafx相关的包,如果使用的是openjdk不仅在Scene Builder中无法运行,项目本身也是运行不了的。
    解决办法:将openJDK更换为oracle公司的JDK包
    相关文章:https://blog.csdn.net/Seky_fei/article/details/116802863
  2. 项目中引入了第三方的javafx包
    由于相关的javafx包没有导入Scene Builder中,因此Scene Builder识别不出相关第三方组件
    解决办法:打开Scene Builder中的JAR/FXML manager 进行相关第三方jar包导入
    在这里插入图片描述
    值得一提的是,导入jar包时我先尝试通过本地导入jar包,但是Scene Builder还是无法正常使用,后来通过jar包坐标导入第三方jar包时就可以正常使用了(这个地方折磨了我好几个小时哈哈)
    在这里插入图片描述
  3. 其他方法
    看到其他小伙伴是通过更改Scene Builder默认的jar包解决的,我尝试过没有什么成效,这里就放个链接:https://blog.csdn.net/qq_34695230/article/details/104877875
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿小表弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值