//This is temporary; will eventually be called from outside publicstaticvoidmain(String[] args) {execute();} }
Распечатка будет выполняться всегда null, независимо от того, что я использую. Я не уверен, почему вышеупомянутое не сработает, поэтому я также попробовал:
"/src/initialization/Lifepaths.txt"
"initialization/Lifepaths.txt"
"Lifepaths.txt"
Ни то, ни другое не работает. До сих пор ячиталмногочисленныевопросы по этой теме, но ни один из них не был полезным - обычно они просто говорят загружать файлы, используя корневой путь, что я уже делаю. Это, или просто загрузите файл из текущего каталога (just load filename), что я тоже пробовал. Файл компилируется в JAR в соответствующем месте с соответствующим именем.
Как мне это решить?
Переведено автоматически
Ответ 1
Lifepaths.class.getClass().getResourceAsStream(...) загружает ресурсы с помощью загрузчика системного класса, очевидно, происходит сбой, потому что он не видит ваши JARS
Lifepaths.class.getResourceAsStream(...) загружает ресурсы с помощью того же загрузчика классов, который загружал класс Lifepaths, и у него должен быть доступ к ресурсам в ваших JARS
При вызове getResourceAsStream (name) имя должно начинаться с "/". Я не уверен, необходимо ли это, но у меня и без этого проблема
Ответ 2
Правила следующие:
проверьте расположение файла, который вы хотите загрузить внутри JAR (и, таким образом, также убедитесь, что он действительно добавлен в JAR)
используйте либо абсолютный путь: путь начинается в корне JAR
используйте относительный путь: путь начинается с каталога пакета вызываемого вами класса getResource / getResoucreAsStream
(не уверен, имеет ли это значение, но в первом случае будет использоваться правильный ClassLoader / JAR, в то время как со вторым я не уверен)
Ответ 3
Итак, есть несколько способов получить ресурс из jar, и каждый из них имеет немного другой синтаксис, где путь должен быть указан по-разному.
Лучшее объяснение, которое я видел, - это статья из InfoWorld. Здесь я подведу итог, но если вы хотите узнать больше, вам следует ознакомиться со статьей.
Методы
ClassLoader.getResourceAsStream().
Формат: имена, разделенные буквами "/"; без начальных "/" (все имена являются абсолютными).
Обновлено в сентябре 2020 года: изменена ссылка на статью. Оригинальная статья была с Javaworld, теперь она размещена на InfoWorld (и содержит еще много рекламы)