Intellij JavaFX - каталог ресурсов не найден в jar - PullRequest
0 голосов
/ 16 декабря 2018

Я работаю над проектом Java и у меня есть небольшая проблема.

Мой проект в настоящее время работает и работает правильно, когда я запускаю его из IntelliJ.Для работы ему нужны некоторые ресурсы, такие как изображения или TXT-файлы.

Это мой текущий файл конфигурация

Моя проблема:

Когда яэкспортировать проект в исполняемый jar-файл, он не работает.Причина в том, что он не может найти ресурсы.

Однако я использовал Class.class.getResourcesAsStream(String).

Самое любопытное, что ресурсы находятся в банке и правильно размещены ...

Кто-нибудь может нам помочь?

Спасибо за вашу помощь.

Мой код

File f = new File(Loader.class.getResource("/xsbfiles").getFile());
System.out.println(f.getAbsolutePath() +": exists ? " + f.exists());
System.out.println(f.getAbsolutePath());

Запуск приложения из Intellij

/Users/gael/IdeaProjects/Sockoban/out/production/Sokoban/xsbfiles: exists ? true
/Users/gael/IdeaProjects/Sockoban/out/production/Sokoban/xsbfiles
Opening /Users/gael/IdeaProjects/Sockoban/out/production/Sokoban/xsbfiles/MicroCosmos.txt
Successful Opening

Запуск файла JAR с терминала

/Users/gael/IdeaProjects/Sockoban/out/artifacts/Sokoban/file:/Users/gael/IdeaProjects/Sockoban/out/artifacts/Sokoban/Sokoban.jar!/xsbfiles: exists ? false
/Users/gael/IdeaProjects/Sockoban/out/artifacts/Sokoban/file:/Users/gael/IdeaProjects/Sockoban/out/artifacts/Sokoban/Sokoban.jar!/xsbfiles
No xsbfile found

Редактировать:

Наконец, я решил свою проблему с помощью BufferedReader, как в примере:

BufferedReader reader = new BufferedReader(
            new InputStreamReader(MyClass.class.getResourceAsStream("/xsbfiles/MicroCosmos.txt")));

Это хорошее решение для загрузки одного файла.Однако мне нужно прочитать все файлы в папке с именем xsbfiles ...

Я искал в разных источниках и нашел похожий вопрос .

Ответ предлагает использовать «хак» для просмотра списка файлов, содержащихся в папке.Вот пример кода Бориса Паука:

public static List<URL> getResources(final String path) throws IOException {
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
try (
        final InputStream is = loader.getResourceAsStream(path);
        final InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
        final BufferedReader br = new BufferedReader(isr)) {
    return br.lines()
            .map(l -> path + "/" + l)
            .map(r -> loader.getResource(r))
            .collect(toList());
    }
}

Чтобы хорошо понять код, я запустил его в своей IDE и в терминале.Кажется, он работает правильно на моей IDE, но не с jar.

Что я сделал, что не работает?

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