2010-12-28 11 views
0

そのバッチ閉じずにバックJavaプログラムに制御を取得する方法:バッチファイルを呼び出している(永遠に実行されます)サーバーのバッチファイルを実行すると、私はJavaプログラム持って

Process proc = Runtime.getRuntime().exec("cmd /c callServer.bat"); 
int exitVal = proc.waitFor(); 
System.out.println("Process exitValue: " + exitVal); 

「callServerを.BAT ":

@echo on 
cd bin 
call shutdown 2011 
call server.bat 

このバッチファイルは、プログラムの中に永遠に実行する必要があり、サーバのバッチファイルであるserver.batファイルを呼び出しています。私はserver.batを起動した後、他の処理を行うJavaプログラムに制御を戻したいと思っています。あまりにも多くの時間を費やして解決できなかったので、私を助けてください。

+0

これは、新しいスレッドまたはプロセスを作成することを意味します。私ができる最高の – WalterJ89

答えて

4

別のスレッドでプロセスを実行するのと同じくらい簡単です。これは別のスレッドで処理を実行すると、バッチファイルの実行中にあなたのメインスレッドが継続できるようになります:

Thread thread = new Thread() { 
    public void run() { 
     Process proc = Runtime.getRuntime().exec("cmd /c callServer.bat"); 
     int exitVal = proc.waitFor(); 
     System.out.println("Process exitValue: " + exitVal); 
    } 
}; 

thread.start(); 
+0

ありがとうジョン!私はそれを試み、すぐに結果を投稿します – Raj

+0

私は答えを得ました;;; callServer.batの代わりに "start" callServer.batを使用する必要があります。お時間をありがとうございます。 – Raj

0

あなたはそれが勝ったように、デーモンスレッドすることができ、別のスレッドからのバッチファイルを呼び出すことができます他のすべてのユーザースレッドが終了しなくなるまで終了しないでください。

しかしプログラムがまだある場合は明らかに動作しないことを、あなたはあなたがプログラムを閉じることを待たずに終了値を取得するためにProcess.exitValue()関数を使用することができます任意の使用

+0

はいアマン、私はこのようにする必要があると思う..よく私はスレッドでそれを試してみましょう。 – Raj

0

のこのことを願ってランニング。

あなたも望んでいた場合、あなたのような何かを行うことができます:

Process proc = Runtime.getRuntime().exec("cmd /c callServer.bat"); 
while(condition){ 
    try{ 
     exitVal = proc.exitValue(); 
     System.out.println("Process exitValue: " + exitVal); 
    } 
    catch(Exception e){/*do nothing*/} 
    //other code goes here 
} 

醜いのようなものをしていますが、スレッドに慣れていないのであれば、あなたはそれを行うことができます。しかし、スレッドを使用することは正しい方法です。

+0

ありがとうチャド!!!しかし、これは私の問題を解決するつもりはありません。 – Raj

関連する問題