解决 SceneBuilder 导入 JFoenix 组件报错的问题

在使用 SceneBuilderJFoenix 开发 JavaFX 应用时,遇到 JFoenix 组件无法正常加载的错误是一个常见问题,尤其是在使用较新版本的 JFoenix 和较新版本的 SceneBuilder 时。常见的报错信息如下:
在这里插入图片描述

例外: com/jfoenix/controls/JFXButton.class
javafx.fxml.LoadException: 
unknown path:2

	at javafx.fxml@23.0.1/javafx.fxml.FXMLLoader.constructLoadException(Unknown Source)
	at javafx.fxml@23.0.1/javafx.fxml.FXMLLoader$InstanceDeclarationElement.constructValue(Unknown Source)
	at javafx.fxml@23.0.1/javafx.fxml.FXMLLoader$ValueElement.processStartElement(Unknown Source)
	at javafx.fxml@23.0.1/javafx.fxml.FXMLLoader.processStartElement(Unknown Source)
	at javafx.fxml@23.0.1/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
	at javafx.fxml@23.0.1/javafx.fxml.FXMLLoader.load(Unknown Source)
	at com.oracle.javafx.scenebuilder.kit.library.util.ExplorerBase.instantiateWithFXMLLoader(ExplorerBase.java:56)
	at com.oracle.javafx.scenebuilder.kit.library.util.ExplorerBase.exploreEntry(ExplorerBase.java:113)
	at com.oracle.javafx.scenebuilder.kit.library.util.JarExplorer.exploreEntry(JarExplorer.java:83)
	at com.oracle.javafx.scenebuilder.kit.library.util.JarExplorer.explore(JarExplorer.java:65)
	at com.oracle.javafx.scenebuilder.kit.library.user.LibraryFolderWatcher.exploreAndUpdateLibrary(LibraryFolderWatcher.java:381)
	at com.oracle.javafx.scenebuilder.kit.library.user.LibraryFolderWatcher.runDiscovery(LibraryFolderWatcher.java:155)
	at com.oracle.javafx.scenebuilder.kit.library.user.LibraryFolderWatcher.run(LibraryFolderWatcher.java:100)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(Unknown Source)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Unknown Source)
	at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
	... 13 more
Caused by: java.lang.NoClassDefFoundError: com/sun/javafx/css/StyleConverterImpl
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
	at java.base/java.security.SecureClassLoader.defineClass(Unknown Source)
	at java.base/java.net.URLClassLoader.defineClass(Unknown Source)
	at java.base/java.net.URLClassLoader$1.run(Unknown Source)
	at java.base/java.net.URLClassLoader$1.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at java.base/java.net.URLClassLoader.findClass(Unknown Source)
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source)   
	at com.jfoenix.controls.JFXButton$StyleableProperties.<clinit>(JFXButton.java:207)
	at com.jfoenix.controls.JFXButton.<init>(JFXButton.java:155)
	... 16 more
Caused by: java.lang.ClassNotFoundException: com.sun.javafx.css.StyleConverterImpl
	at java.base/java.net.URLClassLoader.findClass(Unknown Source)
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
	... 28 more

问题分析

这个错误表明 SceneBuilder 无法正确加载 JFoenix 组件,比如 JFXButtonJFXCheckBox。从日志中可以看到,报错涉及 com/jfoenix/controls/JFXButton.classcom/jfoenix/controls/JFXCheckBox.class 等类。这通常是由于 SceneBuilder 与所使用的 JFoenix 版本不兼容。

原因:版本不兼容

JFoenix 是一个基于 JavaFX 的 Material Design 风格组件库,但由于它在不同版本的 Java 和 SceneBuilder 中的兼容性差异,可能会导致加载失败。尤其是在使用与 Java 8 不兼容的 SceneBuilder 版本时,可能会遇到组件无法识别的问题。

解决方案:使用 Java 8 版本的 SceneBuilder

为了避免版本冲突,我们可以选择使用与 Java 8 兼容的 SceneBuilder 版本,这样就能正确加载 JFoenix 组件。

1. 下载 Java 8 版本的 SceneBuilder

可以从 OpenJFX 中文官网 下载 Java 8 版本的 SceneBuilder。该版本完全兼容 JFoenix,并能够正确加载如 JFXButtonJFXCheckBox 等控件。

2. 安装并使用 Java 8 版本的 SceneBuilder
  • 下载并安装 Java 8 版本的 SceneBuilder
  • 安装完成后,打开 SceneBuilder,加载你的 FXML 文件,此时 JFoenix 组件应该能够正常显示和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值