Итак, я пробовал библиотеку 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
)