Получить файл из папки ресурсов на Java (JavaFX)

Я изучаю программирование JavaFX по слитому курсу. У меня вот такая стандартная структура проекта в Intellij IDEA:

введите сюда описание изображения

И вот такой Main class:

package aoizora.book;

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 stage) throws Exception
    {
        var fxml = getClass().getResource("book.fxml");
        Parent root = FXMLLoader.load(getClass().getResource("../../../resources/book.fxml"));
        stage.setTitle("Address Book");
        stage.setMinHeight(600);
        stage.setMinWidth(400);
        stage.setScene(new Scene(root, 300, 275));
        stage.show();
    }
}

Проблема в том, что я не могу получить доступ к файлу book.fxml из папки ресурсов. Метод getResource возвращает null. Что мне сделать, чтобы получить этот файл без ошибки?

Если важно, опции VM у меня такие:

--module-path C:\JavaFX\lib --add-modules=javafx.controls,javafx.fxml


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

Автор решения: Nazar

Вы неправильно указали путь.

Ваша ошибка в том, что вы указали resources, но этого делать нельзя, так как при создании jar он удаляется, также это ../../ будет лишним.

Например, если структура проекта такая:

src_
    |
    |
 _ main ___
 |        |
 |        |
java   resources
 |        |
aoizora   |
 |        |
book   book.fxml

То в jar-е будет так:

     jar root 
        |
     ___|______________
    |         |        |
book.fxml  aoizora   META-INF
              |        |
            book    MANIFEST.MF
              |
         .class files

поэтому сначала желательно создать в resources отдельную папку, допустим, путь будет таким:

resources/assets/fxml/book.fxml

Потом файл надо так открывать:

Parent root = FXMLLoader.load(getClass().getResource("/assets/fxml/book.fxml"));
→ Ссылка