これが私のサンプルコードです。新しいサブプロセスを実行しながら、標準入力からコマンドを処理したいと考えています。ただし、system.in を読み取った場合、exec メソッドは返されません。exec() 内のコマンドは非常に単純で、stdin とは何の関係もありません。
これを解決する方法はありますか?標準入力を読み取る別のスレッドを開始しながら、新しいサブプロセスを開始するにはどうすればよいですか?
public static void main(String[] args){
new Thread(new Runnable(){
public void run(){
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String command = null;
try{
while((command = reader.readLine()) != null){
System.out.println("Command Received:" + command);
}
}catch(Exception ex){
ex.printStackTrace();
//failed to listening command
}
}
}).start();
Process process = null;
try {
process = Runtime.getRuntime().exec("java -cp C:/agenttest Test");
System.out.println("never returns");
process.waitFor();
} catch (IOException e) {
throw new RuntimeException( e );
} catch (InterruptedException e) {
throw new RuntimeException( e );
}
}
Test クラスは非常に単純です。これが Test.java です。
public static void main(String[] args){
System.out.println("Standard out");
System.out.println("Standard out");
System.err.println("Standard err");
System.out.println("Standard out");
try{
Thread.sleep(10000);
}catch(InterruptedException ex){}
}