1

ある時点で新しいスレッドを開始し、このスレッドがコマンドラインからjarファイルを実行するWebアプリケーションを作成しています。コマンドラインjarは、アプリケーションの外部から呼び出された場合は正常に機能しますが、スレッドから呼び出すと、相対パスは、保存されているディレクトリではなく、C:\ eclipse \(Eclipseからアプリケーションを実行しています)になります。間違った場所でファイルを検索するため、構成を確認します。

jarはログファイルを作成します。これを呼び出そうとすると、次の行がログに書き込まれます。 "10/04/2012 17:09:03 --java.io.FileNotFoundException:C:\ eclipse \ describeors \ analysis_engine \ AggregateAE .xml "jarはC:\eclipse内にありません。プロンプトから呼び出すと問題はありませんが、新しく生成されたスレッドから呼び出すと、このエラーが発生します。実稼働環境で試しましたが、同じ問題があります(今回はベースパスがサーバーのものです)

すべてのパスを変更できないことを考えると、この問題の解決策は何でしょうか?

編集:これはjarを呼び出すスレッドクラスです

public class UimaThread extends Thread {
private int mode=0;
private String path;

public UimaThread(int mode, String path){
    this.mode=mode;
    this.path=path;
}

public void run() {
    Runtime run = Runtime.getRuntime();
    try {
        Properties config = ConfigLoader.getConfig();

        String uimaPath=config.getProperty("uimaPath")+ControlPanelUtils.getDelimiter(config.getProperty("uimaPath"));
//uimaPath is the absolute path to the jar file, mode and path are just arguments passed to the jar
        run.exec("java -jar "+uimaPath+"uimachainfull.jar "+mode+" "+path); 

    }

}

これを実行するコードは次のとおりです。

public void startUima() throws IOException, ServletException {
    Properties config = ConfigLoader.getConfig();
    UimaThread uimaThread = new UimaThread(2, config.getProperty("docPath"));
    uimaThread.start();
}

これを非同期でサーバーの外部で実行する必要があります。ここでstackoverflowで実行する方法を尋ねましたが、そうするように言われました。Webサーバーからアプリケーションを非同期で呼び出す

4

1 に答える 1

0

exec(Stringコマンド)を使用する代わりに、exec(Stringコマンド、String [] envp、File dir)を使用する必要があり、最後の引数(dir)は次のように渡すことができる作業ディレクトリです。新しい議論

于 2012-04-12T11:42:01.250 に答える