ある時点で新しいスレッドを開始し、このスレッドがコマンドラインから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サーバーからアプリケーションを非同期で呼び出す