以前のトピックに関連するこの質問を書いています。
javaコードからbatファイルを実行して、txtファイルで目的の結果を取得します-できません:( 簡単に言うと、batファイルを実行するプログラムをJavaで書きました。このバット ファイルは、デスクトップ アプリケーション テストを実行する TestComplete8 スクリプトを実行します。テストが終了すると、bat ファイルは result.txt というファイルを生成し、テストに関する情報を出力します。現在、別の問題に悩まされています。Java コードから、バットの実行が完了するまで待ちたいと思います。そのために、result.txt というファイルが存在するまでループします。私が推測する最も良い解決策ではありませんが、うまくいくと思い、さまざまな解決策も試しました。何が起こるかというと、正常にループしてファイルが存在するまで待機しますが、testcomplete はテストを実行しません。testcomplete が実行されるため、非常に奇妙です。テストが開始され、AUT も開始されることがわかりますが、何も起こりません。Testcomplete は任意のオブジェクトを待機しており、' 任意の場所をクリックすると、事前定義されたアクションの時間がなくなるまで待機します。コードで待機せずにテストを実行すると、すべて問題ありません。待機が有効になっているときにテスト中に何も起こらない理由と、do-whileまたはwaitFor()を削除するだけで正常に動作する理由、または別のスレッドで実行しようとしてもうまくいかない理由がわかりません。:(
OSに何らかの形で関連している可能性があり、プロセスとしてバットのようなものを実行し、バットがtestcompleteまたはsthのような子プロセスを実行するため、プロセスと関係があると感じています。回答ありがとうございます
尋ねられたソースコード: 今、私は変更されたバットファイルで解決策を試していました:
@ECHO OFF
"C:\Program Files (x86)\Automated QA\TestComplete 8\Bin\TestComplete.exe" "C:..." /r /p:projname PathToApp="C:\...p" Login=... Password=B1 /t:"KeywordTests|..." /exit
最新バージョンで実行して待機するコードは次のとおりです。
new Thread(new Runnable() {
public void run() {
File file = new File("D:\\");
int exitValue = -1;
try {
Process process = Runtime.getRuntime().exec(batch, null, file);
while (true) {
try {
exitValue = process.exitValue();
System.out.println(exitValue);
break;
} catch (IllegalThreadStateException e) {
// e.printStackTrace();
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("Waiting for process...");
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();