Язык: JavaFX
IDE: Netbeans
Проблема: я пытаюсь добавить файл css в таблицу стилей, но первая строка следующего кода всегда генерирует NullPointerException
:
String css = this.getClass().getResource("double_slider.css").toExternalForm();
scene.getStylesheets().add(css);
Я попытался заменить "double_slider.css" на полный путь. double_slider.css в настоящее время находится в том же пакете, что и класс, который делает этот вызов. Я также попробовал все варианты, найденные на http://introjava.wordpress.com/2012/03/21/linking-a-css-style-sheet-to-javafx-scene-graph/, но безуспешно. Очистить и построить тоже не поможет.
Если я помещаю файл css в папку сборки, в которую сохраняются файлы .class, исключение NullPointerException исчезнет. Но тогда файл CSS не работает должным образом, потому что он ссылается на другие файлы в моем проекте.
Ответ 1
поместите ваш файл yourname.css
непосредственно в каталог src.
scene.getStylesheets().add("yourname.css")
очистить и построить требуемый
Ответ 2
Я думаю, что у вас отсутствует косая черта, из-за чего файл CSS не найден. Попробуйте исправить ссылку на путь.
Например:
-root
--app/Main.java
--assets/double_slider.css
:
String css = this.getClass().getResource("/assets/double_slider.css").toExternalForm();
Ответ 3
У меня была та же проблема. Я использую NetBeans 7.3 и JavaFX 2.2.7, JDK 7.0_21 на Win7.
Мое решение состояло в том, чтобы поместить .css в папку SAME в качестве моего файла Java, содержащего void start (Stage stage). Таким образом, представление Project выглядит так:
(Таким образом, файл CSS - это IN пакет, который я нахожу действительно странным и противоречивым. Некоторые документы сообщили мне, чтобы я поместил его в корень проекта, чтобы его можно было найти во время выполнения, но это не работает для меня в NB. Теперь мое приложение запускается независимо от того, начинаю ли я файл, содержащий " start (..)", нажав Ctrl + U или нажав "Выполнить" на контекстное меню проекта. И не имеет значения, допустил ли я, чтобы NB поместил все в JAR или нет.)
Вот код, который загружает CSS в приведенной выше ситуации:
URL url = this.getClass().getResource("controlStyle1.css");
if (url == null) {
System.out.println("Resource not found. Aborting.");
System.exit(-1);
}
String css = url.toExternalForm();
scene.getStylesheets().add(css);
В то время как это не сработало:
scene.getStylesheets().add("controlStyle1.css");
Надеюсь, что это поможет.
Ответ 4
У меня была та же проблема (в NetBeans 8). Я нашел решение здесь: https://blog.idrsolutions.com/2014/04/use-external-css-files-javafx/
Мой файл ресурсов spreadsheet.css был здесь:
MyApp
-resources
--spreadsheet.css
-source packages
--fr.ccc.myapp.view
---mainView.java
---FXMLMain.fxml
В mainView.java:
File f = new File("resources/spreadsheet.css");
spreadsheet.getStylesheets().add("file:///" + f.getAbsolutePath().replace("\\", "/"));
Надеюсь, что это поможет.
Ответ 5
Вы можете добавить свой style.css непосредственно в ваш .fxml файл как атрибут вашего корневого элемента, так как это stylesheets = "@your_relative_path/style.css".
Вы можете использовать @../style.css, если хотите получить доступ к файлу css, находящемуся в папке src
Ответ 6
Учитывая ваш старый код:
String css =this.getClass().getResource("double_slider.css").toExternalForm();
scene.getStylesheets().add(css);
Попробуйте изменить его на новый код, и он будет работать:
screen.getStylesheets().add(getClass().getResource("double_slider.css").toExternalForm());
Когда вы используете getClass()
, вам не нужно использовать ключевое слово this
.
Я надеюсь, что эта работа для вас.:)
Ответ 7
Хммм, ты на Netbeans? Попробуйте "Очистить и построить" проект.
Ответ 8
Вы инициализировали объект сцены до установки таблицы стилей?
scene = новая сцена (myRootLayout, 600, 600);//например
Ответ 9
Это довольно просто.
this.scene.setUserAgentStylesheet(/resources/blabla.css);
Это то, что сработало для меня -
Ответ 10
в вашем файле .java используйте этот
Application.setUserAgentStylesheet(getClass().getResource("application.css")
.toExternalForm());
Ответ 11
Структура папок
В MedicalLibraryFx.java
scene.getStylesheets().add(getClass().getResource("/css/style.css").toString());
Структура папки, когда css находится в том же каталоге, что и контроллер
scene.getStylesheets().add(getClass().getResource("style.css").toString());
Ответ 12
Предполагая, что структура файла выглядит примерно так:
-root
--src
---resources
----double_slider.css
---package
----JavaFXFile.java
Вот что сработало для меня:
scene.getStylesheets().add((new File("src/resources/double_slider.css")).toURI().toString());
Ответ 13
scene.getStylesheets().add("file:///home/fullpathname/file.css");
или же
scene.getStylesheets().add("file:/home/fullpathname/file.css");
но после:
Выполнить/очистить и построить проект
работал на меня
IDE NetBeans 8.2; Java: 1.8.0_201; Linux 16.04
Ответ 14
Во всех ответах пропущена одна очень важная часть и знак " / " перед именем файла CSS:
Структура папки:
src
resources
stylesheet.css
Загрузите это так, обратите внимание на начальный слеш перед файлом CSS:
scene.getStylesheets().add(getClass().getResource("/stylesheet.css").toExternalForm())
Ответ 15
Попробуйте поставить "@" в имени файла. Это сработало для меня.
например: '@main.css'
Ответ 16
.root {
/* background color for selected checkbox */
-fx-background-color:white;
}
.check-box:selected > .box {
/* background color for selected checkbox */
-fx-background-color: lime;
}
.check-box > .box {
/* background color of unselected checkbox */
-fx-background-color:grey;
}
.check-box:selected > .box > .mark,
.check-box:indeterminate > .box > .mark {
/* modify mark color */
-fx-background-color: blue;
}