Как найти подробную информацию о причине ошибки 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 тоже не дал никакой полезной информации.

Итак, вопрос мой не столько "что у меня не так", сколько "как узнать, что у меня не так?". Другими словами, ткните меня пожалуйста носом на ту строку в консоли, где указано, что именно пошло не так.

Если для ответа на вопрос Вас нужно посмотреть другие файлы приложения, то я подготовил открытый репозиторий (возможно, будет он удалён через некоторое время после получения ответа.)


Ответы (0 шт):