Apache Commons Daemon を使用して Windows サービスに変換した Java アプリの Eclipse から次のファイル構造があります。
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: How to read and write xml files? ):
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 もその jar にパッケージ化されているように見えます。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)
見逃した追加の構成はありましたか?