Как найти подробную информацию о причине ошибки Gradle "Exception in Application start method" из вывода в консоль?
Ни в коем случае не хочу показаться новичком, выкладывающим свой рулон кода с единственным вопросом "что у меня не так?", потому этот вопрос будет о том, как узнать, что именно не так.
У меня Gradle-проект с использованием JavaFX. Компиляция вроде как проходит успешно, но при запуске возникает ошибка:
Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.IllegalStateException: Location is not set.
Caused by: java.lang.IllegalStateException: Location is not set.
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2459)
at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435)
at Presenter.GUI_Service.initializeRootLayout(GUI_Service.java:58)
at Presenter.GUI_Service.start(GUI_Service.java:47)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
... 1 more
Execution failed for task ':run'.
> Process 'command 'C:\Users\XXX\.jdks\openjdk-14.0.1\bin\java.exe'' finished with non-zero exit value 1
Единственная ценная информация, которую я обнаружил в логе - это где именно произошла ошибка. Это метод initializeRootLayout класса GUI_Service (наследник javafx.application.Application):
private void initializeRootLayout() {
FXMLLoader FXML_Loader = new FXMLLoader();
FXML_Loader.setLocation(getClass().getResource("/views/RootLayout.fxml"));
try {
rootLayout = FXML_Loader.load();
} catch (IOException exception) {
exception.printStackTrace();
return;
}
primaryStage.setScene(new Scene(rootLayout));
primaryStage.show();
}
Возможно, причина в том, что loader не нашёл нужного fxml файла, но это я сейчас занимаюсь гаданием - что именно произошло, должно быть в сообщении об ошибке. Также, я попытался вывести в консоль ошибку:
private void initializeRootLayout() {
FXMLLoader FXML_Loader = new FXMLLoader();
FXML_Loader.setLocation(getClass().getResource("/views/RootLayout.fxml"));
try {
rootLayout = FXML_Loader.load();
} catch (IOException exception) {
System.out.println("----");
System.out.println(exception.toString());
exception.printStackTrace();
return;
}
primaryStage.setScene(new Scene(rootLayout));
primaryStage.show();
}
Но я её не увидел в консоли. Получается, отладка вслепую: нет никакой информации о том, что именно пошло не так, только известно где. Запуск gradle с папаметрами --stacktrace и --scan тоже не дал никакой полезной информации.
Итак, вопрос мой не столько "что у меня не так", сколько "как узнать, что у меня не так?". Другими словами, ткните меня пожалуйста носом на ту строку в консоли, где указано, что именно пошло не так.
Если для ответа на вопрос Вас нужно посмотреть другие файлы приложения, то я подготовил открытый репозиторий (возможно, будет он удалён через некоторое время после получения ответа.)