Изображение исчезло после преобразования проекта в Maven - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть небольшое приложение JavaFX.Все выглядело хорошо, и работал нормально.Неожиданно я захотел преобразовать этот проект в проект Maven (я хотел добавить некоторые внешние зависимости и использовать их в приложении).

В Eclipse я щелкнул проект правой кнопкой мыши, выбрал Configure и затемConvert to Maven project....Все прошло нормально, пока я не собрал и не запустил приложение.Всё приложение работает отлично, но в окне приложения был логотип, а после преобразования проекта в Maven изображение исчезло.

Я использую JavaFX с FXML и SceneBuilder.

В файле RootLayout.fxml есть запись:

<ImageView fitHeight="150.0" fitWidth="200.0" layoutX="225.0" layoutY="50.0" pickOnBounds="true" preserveRatio="true">
   <image>
      <Image url="@../../../../../../resources/images/nbtc.jpg" />
   </image>
</ImageView>

Она все еще отображается в SceneBuilder после преобразования в Maven, но исчезла из приложения после ее запуска.

Вот структура папок:

enter image description here

Забавно то, что programicon32.png работает правильно и отображается в приложении.Но он определен в другом месте, вне файла FXML:

@Override
public void start(Stage primaryStage) {
    ...
    this.primaryStage.getIcons().add(new Image("file:resources/images/programicon32.png"));
    initRootLayout();
    ...
}

РЕДАКТИРОВАТЬ:

Я переместил изображение в тот же пакет, где RootLayout.fxml, и выбрал перемещенныйизображение в SceneBuilder, изображение показывается сейчас, но все же, это не тот дроид, которого я ищу ...

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Структура папок проекта отличается от структуры пути к классам во время выполнения.Предполагая, что ресурсы включены в путь сборки должным образом, абсолютные пути изображения и fxml в пути к классам во время выполнения равны

/images/nbtc.jpg

и

/com/l4a/mbtc/application/util/RootLayout.fxml

Следовательно, изображение должно бытьуказано как

<Image url="@../../../../../images/nbtc.jpg" />

Вы также не должны полагаться на изображение, доступное как файл во время выполнения.Обычно ресурсы включаются как запись в файл .jar;это не разрешает доступ по протоколу file:.Используйте getResource вместо:

this.primaryStage.getIcons().add(new Image(getClass().getResource("/images/programicon32.png").toExternalForm()));
0 голосов
/ 15 февраля 2019

По соглашению, maven использует определенную структуру каталогов, которую также лучше использовать.(Это настраивается, но мне никогда не нужно было это делать, и для новичка в maven это контрпродуктивно.)

src/
    main/                            // For the application code
        java/
             (com/lva/nbc/...')
        resources/
             (images/)
    test/                            // For unit tests
        java/
        resources/

Таким образом, путь к файлу / классу jar/war/ear будет содержать путиЯ положил в (...).

getClass().getResourceAsStream("/images/nbct.jpg")
...