У меня два проекта JavaFX.
Таким образом, 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. заранее спасибо
Я нашел решение проблемы, поэтому отправлю его здесь для дальнейшего использования.
Если у вас есть 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"));
Используя это, я мог бы развернуть мое приложение, содержащее несколько проектов, без каких-либо проблем.
new File("D:/SubProjAddress/SubProject.fxml")
- это абсолютный путь к файлу fxml. Вам нужно использовать относительный путь.