NullPointer с afterburner.fx при попытке создать вид - PullRequest
0 голосов
/ 25 сентября 2018

Afterburner.fx сломался для меня, и я не могу заставить его работать снова.

В моем основном методе у меня есть это:

 @Override
public void start(Stage primaryStage) throws Exception{
    Map<Object, Object> customProperties = new HashMap<>();
    Injector.setConfigurationSource(customProperties::get);

    final StackPane views = new StackPane();
    customProperties.put("views", views);

    BattleView battleView = new BattleView();
    Parent view = battleView.getView();
    view.setVisible( false );
    view.setId("battle");
    views.getChildren().add(view);

    ...
}

Все же я, кажется, ударилисключение, когда я добираюсь до линии BattleView battleView = new BattleView();.Afterburner fx, кажется, пытается оценить toString() на ui.battle.BattleView, и ему это не нравится, см. Рисунок ниже:

enter image description here

Ив терминале получается:

enter image description here

Я не нашел никакой помощи по похожим вопросам, поэтому надеялся, что кто-то может указать мне правильное направление!Справка!

Редактировать: та же ошибка после переноса battle.css и battle.fxml в ресурсы / пользовательский интерфейс / battle:

enter image description here

Edit2: enter image description here

1 Ответ

0 голосов
/ 25 сентября 2018

Поскольку вы используете Java 11 и модульную систему, ваш каталог вывода ресурсов должен находиться в том же каталоге вывода, что и модуль, к которому они принадлежат.

Судя по изображениям в вашем посте, выиспользуя gradle, и вы строите свой проект непосредственно из IDEA.

Вы должны указать IDE скопировать ваши ресурсы в тот же выходной каталог:

//build.gradle

plugins {
  ...
  id 'idea' //add idea plugin
}

...
//put compiled classes and resources in the same directory (change the path if needed)
idea.module.outputDir file("out/production/classes")  

Если вы планируете строить также с помощью gradle:

//put compiled classes and resources in the same directory (change the paths if needed)
sourceSets.main.output.resourcesDir = "build/classes/java/main"
sourceSets.test.output.resourcesDir = "build/classes/java/test"

и вам, вероятно, потребуется открыть пакет с файлами ресурсов, чтобы инфраструктура могла получить к ним доступ:

//module-info.java
module YourModuleName {
    ...
    opens ui.battle to afterburner.fx; //add this
}

edit:

«Idea» в «idea.module.outputDir» отображается серым цветом с ошибкой «Не удается разрешить символ« idea »».

На самом деле это не ошибка, но вы легко можете от нее избавиться:

//use this format instead of the previous one
idea {
    module.outputDir file("out/production/classes")
}

Я получаю ошибку nullPointer из входных потоков, в которые я пытаюсь загрузить ресурсы, такие как: setImage (new Image (getClass (). GetClassLoader (). GetResourceAsStream ("images /щ / mineStartButton.png ")));

Не звоните getClassLoader(), иначе вам потребуется открыть пакет с ресурсом изображения - даже если код вызова находится в том же модуле (отметьте Javadoc ):

//you need to add '/' at the beginning of the path string to make it absolute
getClass().getResourceAsStream("/images/ui/mineStartButton.png")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...