JavaFX:FXML中导入类的ClassNotFoundException

JavaFX:FXML中导入类的ClassNotFoundException,javafx,textfield,fxml,titled-border,Javafx,Textfield,Fxml,Titled Border,我正在尝试创建一个文本字段,其标题嵌入在字段边框中,如: 按照发布的解决方案,我在src>main>java目录中创建了一个名为TitledBorder.java的.java文件。我的FXML位于src>main>resources目录中,我添加了: 在顶部,它不会显示以下错误: 然后,我将此代码添加到FXML中 <HBox prefHeight="100.0" prefWidth="200.0"> <children> <TitledBor

我正在尝试创建一个文本字段,其标题嵌入在字段边框中,如:

按照发布的解决方案,我在
src>main>java
目录中创建了一个名为
TitledBorder.java
的.java文件。我的FXML位于
src>main>resources
目录中,我添加了:

在顶部,它不会显示以下错误:

然后,我将此代码添加到FXML中

<HBox prefHeight="100.0" prefWidth="200.0">
    <children>
      <TitledBorder title="Email" >
        <TextField fx:id="emailField" prefHeight="44.0" prefWidth="143.0" />
      </TitledBorder>
    </children>
</HBox>
我不知道为什么它引用“/target/classes/…”而不是“/src/main/java/…”

这是我发现的唯一一个FXML示例,所以我很困惑为什么编译时会出现错误,而之前没有显示错误?删除对标题边框的所有引用可以使我的所有代码正常运行/编译。因为它在src包中,所以我在FXML中使用此代码连接w/controller
fx:controller=“loadController”>
。CSS也被正确地添加了

想法?

<?import TitledBorder?>
导入的类名为“TitledBorder”,因此
loadType
方法中第一行的变量
i
将被计算为
name.indexOf('.')=-1
,并将在下一行代码中抛出
ClassNotFoundException

通常,使用默认包是不好的做法。将TitledBorder.java放入某个包中,并将其作为

<?import my.some.package.TitledBorder?>


能否显示从FXML文件导入的内容?至于“我不确定它为什么引用“/target/classes/…”而不是“/src/main/java/…”,肯定是因为它是运行时(而不是编译时)FXML文件的位置.James,问题是我使用的是默认包,应该在我的java包中创建一个包,然后在FXML中引用TitledBorder类。感谢您表现出兴趣。这很有效,感谢Uluk。奇怪的是,我昨晚尝试了这个,但显然我在
java
之外创建了一个包我从你的帖子中学到了一些东西,非常感谢。
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;
}

// TODO Rename to loadType() when deprecated static version is removed
private Class<?> loadTypeForPackage(String packageName, String className) throws ClassNotFoundException {
    return getClassLoader().loadClass(packageName + "." + className.replace('.', '$'));
}
<?import my.some.package.TitledBorder?>