JavaFX CSS URL не загружается

1

Я пытаюсь загрузить XML-ресурс, и я делаю это следующим образом:

fxmlLoader = new FXMLLoader();
root = fxmlLoader.load(getClass().getResource("Document.fxml").openStream());

Когда я запускаю свой код, я получаю эту ошибку:

null/../css/button.css
javafx.fxml.LoadException: 
unknown path:23

Когда я смотрю на строку 23, у меня есть следующее:

<URL value="@../css/button.css" />

это работает:

fxmlLoader = new FXMLLoader();
root = fxmlLoader.load(getClass().getResource("Document.fxml"));

но затем, когда я запускаю следующие

controller = (DocumentController)fxmlLoader.getController();

controller имеет значение null

Как я могу исправить проблему css?

  • 0
    У вас есть fx:controller определенный в вашем Document.fxml ?
  • 0
    Да: <AnchorPane fx:id="anchorPane" minHeight="200.0" minWidth="200.0" prefHeight="600.0" prefWidth="1200.0" styleClass="anchor-pane" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="phantom.DocumentController">
Теги:
javafx

2 ответа

3
Лучший ответ

Это немного догадка, но я думаю, что проблема заключается в том, что вы предоставляете поток ввода для FXMLLoader вместо URL. Из-за этого FXMLLoader не знает о местоположении ресурса FXML и, следовательно, не может разрешить .. в теге URL. Это объясняет сообщение об ошибке:

нуль /../CSS/button.css

javafx.fxml.LoadException:

неизвестный путь: 23

Указанный вами путь относительно null поскольку FXMLLoader не знает местоположение файла FXML; заметьте также, что он сообщает "неизвестный путь" как источник FXML.

Попробуйте это (что чаще встречается)

fxmlLoader = new FXMLLoader(getClass().getResource("Document.fxml"));
root = fxmlLoader.load(); 

Я полагаю, что он возвращает null для контроллера только потому, что была ошибка при загрузке fxml.

  • 0
    Кажется, это проблема. Это больше не показывает ноль!
  • 1
    То, как я это понял, было из чьего-то ответа. Спасибо за ответ!
0

В вашем.fxml измените <URL value = "@../css/button.css"/> на <URL value = "@/css/button.css"/>. То же самое, если у вас есть "css" или "изображение".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню