2015-06-17 5 views
2

Я очень новичок в JavaFX, и у меня возникла проблема с использованием моего пользовательского класса в FXML. Консоль продолжает давать мне это исключение при попытке загрузить main.fxml:FXML: ClassNotFoundException

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

Я создал BoardPane класс как подкласс FlowPane в пакете sample.View и передал ему в моем FXML как:

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

и структура проекта выглядит следующим образом:

  • ресурсы
    • FXML
      • main.fxml
  • ...
  • ЦСИ
    • ...
    • образец
      • ...
      • Посмотреть
        • BoardPane

Может кто-нибудь, пожалуйста, помогите мне в этом? Я искал какое-то время и не нашел никаких объяснений.

+0

вы можете попробовать использовать '' с '*' или '<.? import sample.View. *?> ' – varren

+0

@varren Я пробовал оба, и они не помогли :( –

ответ

3

Название упаковки «Вид» должно быть строчным. В вашем проекте, а также в файле fxml.

Для получения более подробной информации см метод loadType из FXMLLoader.class:

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; 
} 
+0

Огромное вам спасибо! –

+1

Почему это ограничение было помещено на FXMLLoader? –

+0

Это исправило проблему для меня. Странно, что это ограничение помещается в имена пакетов при создании пользовательских компонентов и встраивании их в .fxml-файлы, но не имеет значения, используете ли вы '* fx: include fx: id =" name "source =" filename.fxml "/>' style include , – gbmhunter

Смежные вопросы