У меня есть следующая файловая структура из Eclipse для моего Java-приложения, которое я превратил в службу Windows с помощью Apache Commons Daemon.
SubscriberACD
/Maven Dependencies
/src/main/java
/org.SubscriberACD
/Subscriber.java
/src/test/java
/JRE System Librar
/src
/target
config.xml
pom.xml
В Subscriber.java здесь определена строка:
private static final String CONFIG_FILE = "config.xml";
Вот фрагмент кода для чтения из файла xml (на основе этого сообщения: Java: как читать и записывать xml-файлы?):
Document document;
DocumentBuilderFactory doc_builder_factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder doc_builder = doc_builder_factory.newDocumentBuilder();
document = doc_builder.parse(CONFIG_FILE);
Мой файловый каталог для службы выглядит так:
E:\SubscriberACD
\bin
\subscriberACD.exe
\subscriberACDw.exe
\classes
\org
\SubscriberACD
\Subscriber.class
\config.xml
\3rdpartyjarfiles
\SubscriberACD.jar
\logs
Обратите внимание, как я поместил config.xml в SubscriberACD под классами, просто чтобы попробовать. Но это не сработало. Также стоит отметить, что я также экспортировал свой проект как SubscriberACD.jar и поместил его в папку \classes. Из eclipse похоже, что config.xml также упаковывается в эту банку. Я получаю следующую ошибку, когда пытаюсь запустить службу Windows:
2016-04-16 15:08:27 Commons Daemon procrun stderr initialized
Exception in thread "main" n\config.xml (The system cannot find the file specified)
java.lang.NumberFormatException: For input string: "null"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at zmq.TcpAddress.resolve(TcpAddress.java:105)
at zmq.Address.resolve(Address.java:98)
at zmq.SocketBase.connect(SocketBase.java:510)
at org.zeromq.ZMQ$Socket.connect(ZMQ.java:1246)
at org.SubscriberACD.Subscriber.start(Subscriber.java:114)
at org.SubscriberACD.Subscriber.windowsService(Subscriber.java:61)
Была ли какая-то дополнительная конфигурация, которую я пропустил?