Перечисление ресурсов в работающем jar не выполняется при запуске из сети - PullRequest
1 голос
/ 01 июля 2019

Я написал Java-приложение Swing, которое должно найти свои иконки из ресурсов.Поэтому я хочу найти любой PNG в определенной папке в исполняемом файле JAR.Я не знаю раньше, какие имена будут там.

Чтобы найти png внутри папки ресурсов, я использую следующий код:

private List<String> getResourceFolderFileNames(String folder) {
    List<String> names = new ArrayList<>();
    File jarFile = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
    System.out.println("Folder to search in: " + folder);
    try {
        if (jarFile.isFile()) {
            System.out.println("This is a jar file dir");
            JarFile file = new JarFile(jarFile);
            Enumeration<JarEntry> entries = file.entries();
            List<JarEntry> jarEntries = new ArrayList<>();
            while (entries.hasMoreElements()) {
                jarEntries.add(entries.nextElement());
            }
            System.out.println("Number of entries: " + jarEntries.size());
            for (JarEntry e: jarEntries
                 ) {
                String name = e.getName();
                if (name.matches(".*/" + folder + "/[0-9]+\\.png")) {
                    name = name.split("/")[2];
                    System.out.println("Added name: " + name);
                    names.add(name);
                }
            }
        } else {
            System.out.println("This is not a jar file");
            ClassLoader loader = Thread.currentThread().getContextClassLoader();
            URL url = loader.getResource("resources/" + folder);
            String path = url.getPath();
            for (File f: new File(path).listFiles()
                 ) {
                names.add(f.getName());
            }
        }
    } catch (Exception e) {
        System.out.println(e.getMessage() + "catch in get Resource folder file names");
    }
    return names;
}    

Желаемое поведение кода заключается в том, чтоон вернет список строк, которые являются именами файлов ******. png.

Остальная часть на самом деле еще не работает, но программа никогда не достигает этого.Эта часть предназначена для того, когда вы начинаете поиск в IDE, потому что там, похоже, он работает иначе (указал на некоторые другие вопросы).Кажется, что он не работает на "jarFile.isFile ()".

Ошибка:

Когда я запускаю экспортированный исполняемый файл JAR на Windows или Macэто прекрасно работает.Он делает именно то, что должен делать.Если я запускаю тот же исполняемый файл jar из сетевой папки, он не находит png-файлы.

Структура проекта

Здесь находятся мои значки

--src/
    --resources/
        --iconfolder1
        --iconfolder2

Если мне понадобится дополнительная информация, я сделаю все возможное, чтобы помочь вам помочь мне.Большое спасибо.

edit 1:

Теперь он снова работает в IDE, но по-прежнему не работает в сети.

br Alex

...