2016-04-16 2 views
0

Apache Commons Daemonを使用してWindowsサービスに変換したJavaアプリケーションのEclipseから次のファイル構造を持っています。 Subscriber.javaでApache Commonsデーモンを使用してJavaアプリケーションからWindowsサービスを開始するときに指定されたファイルが見つかりません

SubscriberACD 
    /Maven Dependencies 
    /src/main/java 
     /org.SubscriberACD 
      /Subscriber.java 
    /src/test/java 
    /JRE System Librar 
    /src 
    /target 
    config.xml 
    pom.xml 

文字列が定義され、ここであり:ここ

private static final String CONFIG_FILE = "config.xml"; 

は(:Java: How to read and write xml files?このポストのオフに基づいて):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もその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) 

私は逃したいくつかの追加の設定がありましたか?

答えて

1

このお試しください:次にSubscriber.javaに負荷にしようと

E:\SubscriberACD\classes\config.xml 

: classesフォルダに直接ファイルのconfig.xmlを入れをこのようなファイル:

Document document; 
DocumentBuilderFactory doc_builder_factory = DocumentBuilderFactory.newInstance(); 
try { 
    DocumentBuilder doc_builder = doc_builder_factory.newDocumentBuilder(); 
    try(InputStream instream = Thread.currentThread().getContextClassLoader().getResourceAsStream("config.xml")) { 
     document = doc_builder.parse(instream); 
    } 
} catch(SAXException | ParserConfigurationException e) { 
    throw new RuntimeException(e); 
} 
0

(Eclipse)ソースフォルダを作成し、その中に「config.xml」を貼り付けます。 (InputStreamを)をされて使用して

InputStream is = getClass().getClassLoader().getResourceAsStream("config.xml"); 

解析

関連する問題