0

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)

見逃した追加の構成はありましたか?

4

2 に答える 2

0

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

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

is (InputStream)を使用して解析する

于 2016-04-16T20:30:58.753 に答える