Создайте и выполните JavaFX jar с помощью maven - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь сгенерировать и выполнить простой исполняемый файл JAR, используя следующий шаблон JavaFX - Maven (eclipse: Версия: 2018-09 (4.9.0) ID сборки: 2018)

enter image description here

Он поставляется с простым графическим интерфейсом JavaFX, я прекрасно скомпилировал программу (я использую JDK 10, jre 10.0.2) в Eclipse IDE, однако я не знаю, как это сделать.сгенерируйте исполняемый файл jar и запустите его, если я сделаю это, используя Eclipse export-> Runnable jar, я получу известное сообщение «java.lag.NullPointerException: Location is required» сообщение об ошибке в строке 14 файла main.java.

Я исправил эту ошибку и не смог ее исправить, поскольку я использую только один файл fxml, и он уже находится в каталоге resources / fxml, я не знаю, почему он все еще получает нулевое значение из getResource ()метод ...

Вот структура проекта и код основного класса: enter image description here

Проблема в том, что эта строка кода:

Parent root = FXMLLoader.load(getClass().getResource("/fxml/Scene.fxml"));

открытый класс MainApp расширяет приложение {

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("/fxml/Scene.fxml"));

    Scene scene = new Scene(root);
    scene.getStylesheets().add("/styles/Styles.css");

    stage.setTitle("JavaFX and Maven");
    stage.setScene(scene);
    stage.show();
}

/**
 * The main() method is ignored in correctly deployed JavaFX application.
 * main() serves only as fallback in case the application can not be
 * launched through deployment artifacts, e.g., in IDEs with limited FX
 * support. NetBeans ignores main().
 *
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}

}

Это неправильный способ создания jar-файла jar или лучший способ создания jar-файла, пригодного для выполнения, для проектов maven?

1 Ответ

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

Я думаю, что ваш строковый аргумент в getResources() приведет к поиску следующего:

AddressAppNew/fxml/Scene.fxml

Поскольку файл находится в пакете "src / main / resources", вам нужно будет включитьэти пакеты и подпакеты как часть адреса.

Я бы попробовал следующее:

getClass().getResource("/src/main/resources/fxml/Scene.fxml")

или, может быть, это:

getClass().getResource("../../../../resources/fxml/Scene.fxml")

Последнее основано наMainApp находится в папке

AddressAppNew/src/main/java/com/corp/AdressAddNew

Я не могу найти API синтаксиса для интерпретации строкового аргумента getResource ().Я думаю , что "/" в начале относится к корню проекта, а без "/" строка добавляется в местоположение папки вызванного класса.Но я могу ошибаться.Это суетливо, и часто мне приходится прибегать к каким-то возням, чтобы получить правильную адресную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...