У меня есть проект Maven, и я пытаюсь работать с javafx (я использую Eclipse) Я хочу изменить путь к своим файлам. у меня есть
Parent root = FXMLLoader.load(getClass().getResource("/application/Main.fxml"));
Это отлично работает со следующей структурой папок
src
main
java
com
projectFolder
main.java
application
Main.fxml
Но я хочу что-то вроде
src
main
java
com
projectFolder
main.java
application
Main.fxml
Я пробовал Parent root = FXMLLoader.load(getClass().getResource("/com/application/Main.fxml"));, но не работает.
Я получаю следующую ошибку
[JavaFX Application Thread] ERROR com.application.Main - javafx.fxml.LoadException:
/C:/Users/user/workspace/git/project/target/classes/com/application/Main.fxml:15
Кто-нибудь знает, что с этим не так?
Запуск от имени / Java-приложение
Сделайте снимок экрана со структурой каталогов в вашей среде IDE и добавьте свой вопрос, так как мне нужно понять, что вы имеете в виду под projectFolder и почему вы получили двойную косую черту при использовании вспомогательного метода!
Я загрузил структуру папок. Двойная косая черта - это опечатка, и stackoverflow не позволяет мне ее редактировать.




Я не рекомендую эту запутанную файловую структуру ...
Но в этом случае я считаю, что вам нужно будет использовать относительный путь к ресурсу: ../application/Main.fxml
getClass().getResource() ожидает, что ресурс находится в том же каталоге, что и вызывающий класс. Это не так, поэтому вам понадобится Java для резервного копирования одного каталога с помощью ...
Хм, это может решить проблему, но я почти уверен, что это не сработает, когда вы экспортируете свой проект в исполняемый файл JAR. По крайней мере, в прошлом у меня было много проблем с использованием относительных путей.
какую структуру вы рекомендуете? Если я сделаю что-нибудь вроде FXMLLoader.load (getClass (). GetResource ("../ application / Main. fxml")); Я получаю ошибку другого типа: java.lang.NullPointerException: требуется местоположение.
Предполагая, что у нас с вами действительно такая же структура проекта, как на картинке ниже:
Чтобы загрузить файл FXML, вы должны использовать полный путь, как в примере ниже:
package main.java.com.projectFolder;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loader = new FXMLLoader(this.getClass().getResource("/main/java/com/application/Main.fxml"));
Parent root = loader.load();
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
}
Теперь, если вы действительно используете относительный путь, например:
FXMLLoader loader = new FXMLLoader(this.getClass().getResource("../application/Main.fxml"));
Вышеупомянутое также будет работать, пока вы компилируете и запускаете код в среде выполнения Eclipse. В тот момент, когда вы экспортируете проект в файл JAR и попытаетесь его выполнить, вы получите ту же ошибку, что и с самого начала. Вы можете прочитать об этом в аналогичном посте вроде этого: Он работает нормально в Eclipse, но не может работать как файл .jar
Обновлено: для проекта maven вам следует подумать о перемещении файла FXML в папку src / main / resources /. Вы можете найти еще один в этом посте: JavaFX и maven: NullPointerException: требуется расположение
Спасибо, но у меня он точно такой же, как этот загрузчик FXMLLoader = новый FXMLLoader (this.getClass (). GetResource ("/ main / java / com / appli cation / Main.fxml")); и по-прежнему получаю эту ошибку [Тема приложения JavaFX] ОШИБКА com.application.Main - java.lang.NullPointerException: требуется местоположение.
@andreasViena Интересно .. В этом случае есть две возможности: либо это Java-проект Maven / Gradle, который по-разному обрабатывает пути и имеет другую структуру проекта, либо у вас нет такой же структуры проекта, как у меня, показывая нам изображение вашего обзора навигатора на затмении может быть полезным
да, у меня такая же структура. Я собираюсь проверить дело maven
@AndreasViena Когда вы создаете проект, вы выбираете опцию «Java Project», верно? Какую среду IDE вы используете (Eclipse, InteliJ и т. д.)? Какая у вас версия Java? Может проблема в другом.
Это проект знатока. Я использую Eclipse, java 8
@andreasViena Ну, я не знаком с Maven, но из того, что я могу сказать, вам нужно сделать некоторые конфигурации или использовать определенную структуру папок для загрузки ресурсов. Взгляните на похожий пост вроде этого: stackoverflow.com/questions/20348657/…
Интересно. Странно то, что если я назову свое пакетное приложение instade com.application и сделаю это Parent root = FXMLLoader.load (getClass (). GetResource ("/ application / Main.fx ml")); он отлично работает
@andreasViena Может быть, есть какое-то отношение к тому, как maven манипулирует файлами при компиляции. Подумайте о том, чтобы проверить правку в моем сообщении, чтобы узнать, узнаете ли вы о своей проблеме. Также рассмотрите возможность добавления информации, которую вы предоставляете в комментариях выше, в основной пост, чтобы все могли их видеть (я имею в виду Maven и т. д.), Также вы можете добавить соответствующий тег maven.
Как вы запускаете свое приложение?