JavaFX Развертывание с другими проектами JavaFX

1

У меня два проекта JavaFX.

  • Sub Project: AnchorPane с меткой. (и к нему подключен контроллер)
  • Основной проект: AnchorPane с кнопкой. Вы нажмете его, и он будет
    вывести на экран новое окно с Sub Project.

Таким образом, Sub Project и Main Project имеют свой собственный файл и контроллер fxml.

Когда я компилирую главный проект с помощью NetBeans, он отлично работает. Однако, как только я разворачиваю главный проект на другой компьютер, он дает сообщение об ошибке "Система не может найти указанный файл"

Я думаю, что проблема заключается в том, что я использую абсолютный путь местоположения fxml для субпроекта, когда я всплываю под окном. Я пытаюсь получить путь к файлу fxml в Jar из внешней библиотеки, но я не нашел никакого решения. Кто-нибудь может мне помочь?

Вот мой код, открывающий новое окно подпроекта в Main Project Controller

@FXML
private void handleButtonAction() throws IOException() {
    FXMLLoader loader = new FXMLLoader(new File("D:/SubProjAddress/SubProject.fxml").toURI().toURL());
    Parent root = (Parent)loader.load();
    Scene scene = new Scene(root);
    Stage stage = new Stage();
    stage.setScene(scene);
    stage.show();
}

Я использую Java 8, netbeans. заранее спасибо

  • 0
    Я нашел веб-страницу Oracle «5.8.3 Упаковка сложных приложений» и там написано: «Для файла JAR с двойным кликом рассмотрите возможность переупаковки всего в один гигантский файл JAR и загрузки собственных библиотек и файлов данных изнутри JAR». Но я понятия не имею, что это значит ..
  • 0
    new File("D:/SubProjAddress/SubProject.fxml") - это абсолютный путь к файлу fxml. Вам нужно использовать относительный путь.
Показать ещё 7 комментариев
Теги:
netbeans
deployment
javafx-8

1 ответ

0
Лучший ответ

Я нашел решение проблемы, поэтому отправлю его здесь для дальнейшего использования.

Если у вас есть MainProject, содержащий SubProject, и вы хотите загрузить SubProject fxml в свой основной проект, вам нужно загрузить файл subProject fxml из.jar файла SubProject. Вышеприведенный код выглядит как загрузка SubProject fxml из файла src, а не файла.jar, и это вызывает проблему.

Чтобы загрузить файл fxml из файла jar, просто используйте Class.getResource() вместо указанного выше кода.

например,

FXMLLoader loader = new FXMLLoader(new File("D:/SubProjAddress/SubProject.fxml").toURI().toURL());
Parent root = (Parent)loader.load();

становится

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

Используя это, я мог бы развернуть мое приложение, содержащее несколько проектов, без каких-либо проблем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню