javafx - FXML:ClassNotFoundException

标签 javafx fxml fxmlloader

我对 JavaFX 非常陌生,在 FXML 中使用自定义类时遇到问题。尝试加载 main.fxml 时,控制台不断给出此异常:

... 1 more
Caused by: java.lang.ClassNotFoundException: sample.View$BoardPane
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
...

我在 sample.View 包中创建了 BoardPane 类作为 FlowPane 的子类,并在我的 FXML 中将其引用如下:

<?import sample.View.BoardPane?>
...
<TitledPane expanded="true" collapsible="false" text="BoardPane" fx:id="centerTitledPane">
    <BoardPane fx:id="mechoBoardPane"/>
</TitledPane>
...

项目结构如下所示:

  • 资源
    • fxml
      • main.fxml
  • ...
  • 源代码
    • ...
    • 样本
      • ...
      • 查看
        • 板 Pane

有人可以帮我解决这个问题吗?我已经搜索了一段时间,但没有找到任何解释。

最佳答案

包名“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:ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30881845/

相关文章:

java - 按下按钮时,应在日期选择器中显示并计数一个数字

java - 一个 FXML 文件的多个 Controller

JavaFX加载FXML文件异常

java - 如何从第二个 Controller 将值传递到已打开的阶段(第一个 Controller )?

具有 SQL 日期值的 JavaFX 折线图

java - 在 JavaFX 中设置按钮操作时出现 "Cannot find symbol constructor, EventHandler does not take parameters"

java - 是否可以通过查找来控制非颜色字段的值?

JavaFX : draw sharp thin lines

java - 尝试将文件移动到不同位置(在项目文件夹中)

javafx-2 - 从另一个 fxml 文件的 Controller 加载 fxml 文件时出现空点异常