JavaFX загружает стиль CSS из папки ресурсов

Структура проекта:

Структура проекта

В настоящее время я разрабатываю приложение JavaFX в Eclipse, и у меня возникают проблемы с загрузкой таблицы стилей .css из папки ресурсов.

Я уже добавил папку ресурсов в путь к классам (Свойства проекта -> Источник -> Добавить папку).

Используется следующий код:

this.getStylesheets().add(getClass().getResource("/CSS/application-container.css").toExternalForm());

getResource() выдает NullPointerException. Я читал другие сообщения и пробовал все, но не могу заставить его работать.

РЕДАКТИРОВАТЬ: удалось заставить его работать, удалив и восстановив папку bin. Теперь .css загружен, но по какой-то причине он не применяется, однако при использовании метода javaFX .setStyle(...) с тем же содержимым .css он работает.

private void buildHeader() {
    this.header.setId("header-container");
    this.getStylesheets().add(getClass().getResource("/CSS/application-container.css").toExternalForm());
    // this.header.setStyle("-fx-background-color: #7b9bce;");      this way works
}

CSS:

@charset"utf-8";

#header-container {
    -fx-background-color: #7b9bce;
}

person Franch    schedule 20.01.2017    source источник
comment
Проверьте содержимое папки сборки, чтобы убедиться, что файл CSS находится в ожидаемом месте.   -  person James_D    schedule 20.01.2017
comment
this на что здесь ссылаются?   -  person Bo Halim    schedule 20.01.2017
comment
@James_D файл .css был скопирован eclipse в bin / CSS / application-container.css, так что кажется, что все в порядке. Не знаю, почему в корзине нет папки ресурсов   -  person Franch    schedule 20.01.2017
comment
@BoHalim в данном контексте относится к BorderPane   -  person Franch    schedule 20.01.2017
comment
Внутри bin нет папки ресурсов, потому что это исходная папка, а не пакет. Все выглядит правильно. Вы уверены, что getClass().getResource("/CSS/application-container.css") возвращает null? (т.е. вы не получаете npe откуда-то еще). Попробуйте System.out.println(getClass().getResource(...)) проверить.   -  person James_D    schedule 20.01.2017
comment
@James_D Я удалил папку bin и повторно добавил папку ресурсов в путь сборки, и теперь getResource больше не возвращает null. Проблема, с которой я столкнулся сейчас, заключается в том, что стиль не применяется, однако hbox.setStyle(...) отлично работает и отображает стиль. Но я бы очень хотел использовать внешний .css, чтобы не смешивать дизайн графического интерфейса с кодом.   -  person Franch    schedule 20.01.2017
comment
Можете ли вы просто показать ту часть вашего стиля, которая вам не подходит? Для информации, стиль применяется только в случае узлов, имеющих пример класса стиля по умолчанию (Controls) (кнопка / панель прокрутки / поле со списком ...), если вы, конечно, используете их styleClass в своем коде CSS, если node не имеет стиля класса по умолчанию, вы должны использовать ID стиля или имя, которое хотите, и назначить его своему узлу с помощью метода setId() или getStyleClass(). !   -  person Bo Halim    schedule 20.01.2017
comment
@Franch Измените свой вопрос, добавив дополнительную информацию, вместо того, чтобы размещать код в комментариях.   -  person James_D    schedule 21.01.2017


Ответы (1)


Наконец-то он работал с внешним .css, очевидно, парсер CSS JavaFX не допускает @charset "utf-8" или любую аннотацию @. Никаких предупреждений не было.

Решение:

Измените это:

@charset"utf-8";

#header-container {
    -fx-background-color: #7b9bce;
}

Кому:

#header-container {
    -fx-background-color: #7b9bce;
person Franch    schedule 21.01.2017