Java получает ресурсы, так как поток всегда возвращает ноль - PullRequest
1 голос
/ 27 марта 2019

Я пытаюсь загрузить изображение, используя InputStream.Однако, когда я загружаю свое изображение, оно всегда возвращает ноль.Вот моя структура проекта:

project
--+ src
----+ chess
------+ model
--------+ piece
----------+ Piece.java
------+ assets
--------+ icons
----------+ piece
------------+ rook_black.png

И путь, который я использую для доступа к изображению: ./src/chess/assets/icons/piece/rook_black.png

Я попытался показать все файлы в каталоге от Piece.java itworks:

String path = "./src/chess/assets/icons/piece/";
File[] files = new File(path).listFiles();

for (File file: files) {
    System.out.println(file.getName());
}

Мой код:

public Image getImage() {
    String path = "./src/chess/assets/icons/piece/rook_black.png";
    InputStream image = getClass().getResourceAsStream(path);

    if (image != null) {
        return new Image(image);
    }

    System.out.println("No " + toString() + " image in " + path);
    return null;
}

Этот код на самом деле выводит No rook image in ./src/chess/assets/icons/piece/rook_black.png, но я хочу, чтобы InputStream не был нулевым.

1 Ответ

1 голос
/ 27 марта 2019

Дело в том, что вы должны думать с точки зрения скомпилированных ресурсов, что означает, что вы должны думать о том, как выглядит JAR-артефакт.Папка src отсутствует.

enter image description here

Действительно, вам нужно

final String path = "/chess/assets/icons/piece/rook_black.png";

, что является абсолютный путь , начиная с корня .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...