FXML:ClassNotFoundException
FXML: ClassNotFoundException
我是 JavaFX
的新手,在 FXML
中使用自定义 class 时遇到问题。控制台在尝试加载 main.fxml
时一直给我这个异常:
... 1 more
Caused by: java.lang.ClassNotFoundException: sample.View$BoardPane
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
...
我在包 sample.View
中创建了 BoardPane
class 作为 FlowPane
的子 class,并在我的 FXML 中引用它如下:
<?import sample.View.BoardPane?>
...
<TitledPane expanded="true" collapsible="false" text="BoardPane" fx:id="centerTitledPane">
<BoardPane fx:id="mechoBoardPane"/>
</TitledPane>
...
项目结构如下所示:
- 资源
- fxml
- main.fxml
- ...
- 来源
- ...
- 样品
- ...
- 查看
- BoardPane
谁能帮我解决这个问题?我一直在寻找一段时间,但没有找到任何解释。
包名"View"必须小写。在您的项目以及 fxml 中。
更多细节见FXMLLoader.class的方法loadType:
private Class<?> loadType(String name, boolean cache) throws ClassNotFoundException {
int i = name.indexOf('.');
int n = name.length();
while (i != -1
&& i < n
&& Character.isLowerCase(name.charAt(i + 1))) { // <<<<<<<<<
i = name.indexOf('.', i + 1);
}
if (i == -1 || i == n) {
throw new ClassNotFoundException();
}
String packageName = name.substring(0, i);
String className = name.substring(i + 1);
Class<?> type = loadTypeForPackage(packageName, className);
if (cache) {
classes.put(className, type);
}
return type;
}
我是 JavaFX
的新手,在 FXML
中使用自定义 class 时遇到问题。控制台在尝试加载 main.fxml
时一直给我这个异常:
... 1 more
Caused by: java.lang.ClassNotFoundException: sample.View$BoardPane
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
...
我在包 sample.View
中创建了 BoardPane
class 作为 FlowPane
的子 class,并在我的 FXML 中引用它如下:
<?import sample.View.BoardPane?>
...
<TitledPane expanded="true" collapsible="false" text="BoardPane" fx:id="centerTitledPane">
<BoardPane fx:id="mechoBoardPane"/>
</TitledPane>
...
项目结构如下所示:
- 资源
- fxml
- main.fxml
- fxml
- ...
- 来源
- ...
- 样品
- ...
- 查看
- BoardPane
谁能帮我解决这个问题?我一直在寻找一段时间,但没有找到任何解释。
包名"View"必须小写。在您的项目以及 fxml 中。
更多细节见FXMLLoader.class的方法loadType:
private Class<?> loadType(String name, boolean cache) throws ClassNotFoundException {
int i = name.indexOf('.');
int n = name.length();
while (i != -1
&& i < n
&& Character.isLowerCase(name.charAt(i + 1))) { // <<<<<<<<<
i = name.indexOf('.', i + 1);
}
if (i == -1 || i == n) {
throw new ClassNotFoundException();
}
String packageName = name.substring(0, i);
String className = name.substring(i + 1);
Class<?> type = loadTypeForPackage(packageName, className);
if (cache) {
classes.put(className, type);
}
return type;
}