Проблемы с загрузкой нескольких ресурсов - log4j.properties - PullRequest
0 голосов
/ 08 февраля 2012

Итак, я пробовал библиотеку apache log4j, и мне удалось заставить все работать правильно. Я запустил свою программу один раз, и она отлично все сделала. Затем я пошел, чтобы запустить его снова, и он разбился Я попробовал снова и снова, программа потерпела крах.

У меня есть несколько файлов .properties в каталоге properties /. Я использую два разных .properties файла и загружаю их оба, используя getResource и getResourceAsStream соответственно:

сначала для настройки моего логгера:

PropertyConfigurator.configure(MyClass.class.getResource("properties/MyClassconfig.properties"));

затем, чтобы загрузить все константы, используемые в программе:

properties.load(MyClass.class.getResourceAsStream("properties/constants.properties"));

Как я уже говорил, при первом запуске это работало отлично. Со второго запуска я получил эту ошибку:

log4j:ERROR Could not read configuration file from URL [null].
java.lang.NullPointerException
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:522)
    at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:415)
    at com.package.package2.common.main.MyClass.main(MyClass.java:69)
log4j:ERROR Ignoring configuration file [null].

Итак, строка:

MyClass.class.getResource("properties/MyClassconfig.properties")

больше не возвращает действительный URL, а вместо этого возвращает ноль. Я думал, что это потому, что некоторые InputStream оставались открытыми после первого запуска (как поток ввода, открытый в:

MyClass.class.getResource("properties/MyClassconfig.properties"); )

Причина, по которой я думаю, что существует конфликт между getResource и getResourceAsStream, заключается в том, что сбой действительно происходит позже, когда я звоню:

properties.load(MyClass.class.getResourceAsStream("properties/constants.properties"));

Я получаю:

Properties$LineReader.readLine() line: not available [local variables unavailable]  
Properties.load0(Properties$LineReader) line: not available 
Properties.load(InputStream) line: not available    

Несмотря на то, что нет никакой связи между самим регистратором и Properties.load() и его InputStream (за исключением того, что они оба инициализируются с файлами .properties)

1 Ответ

0 голосов
/ 08 февраля 2012

Почему бы просто не включить log4j.properties в ваш путь к классам и покончить со всей ручной загрузкой ресурсов?

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