Я пытаюсь загрузить 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?
Это немного догадка, но я думаю, что проблема заключается в том, что вы предоставляете поток ввода для 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.
В вашем.fxml измените <URL value = "@../css/button.css"/>
на <URL value = "@/css/button.css"/>
. То же самое, если у вас есть "css" или "изображение".
fx:controller
определенный в вашемDocument.fxml
?<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">