0
CMDを通じてアプリケーション(RCMIClient.exe)を開こうとしています。私はCMDを開くことができましたが、CMDにコマンドを読み書きすることはできません。以下はコードですが、エラーはありません。ただCMDを開き、何もしませんが、CMDを手動で閉じるとエラーが発生します。Javaのストリームを介してCMDにコマンドを送信できません
null
Exception in thread "main"
java.io.IOException: Stream closed
at java.lang.ProcessBuilder$NullOutputStream.write(ProcessBuilder.java:433)
at java.io.OutputStream.write(OutputStream.java:116)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
at java.io.BufferedWriter.flush(BufferedWriter.java:254)
at test.test.main(test.java:36)
コード:
public static void main(String[] args) throws IOException, InterruptedException {
File f = new File("C:\\WDGSIMTools\\Anite\\RCMI\\Samples\\Release");
ProcessBuilder pb = new ProcessBuilder("cmd.exe","/c","start").directory(f);
pb.redirectErrorStream(true);
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
BufferedReader error = new BufferedReader(new InputStreamReader(p.getErrorStream()));
StringBuilder output = new StringBuilder();
String line;
String errline;
errline = error.readLine();
System.out.println(errline);
while((line=reader.readLine())!=null) {
output.append(line);
}
//To test whether its reading CMD contents
System.out.println(output);
//send commands to CMD
writer.write("RCMIClient.exe"+"\n");
writer.flush();
writer.write("1"+"\n");
writer.close();
reader.close();
}
ありがとうパトリックを呼び出す必要があります。私は変更を加え、アプリケーションを開いたが、バックグラウンドで行った。あなたはそれをフォアハンドにする方法を知っていますか? – Rajesh
@Rajesh "1 \ n"を送信した後にProcess.waitForを試してください –
@Rajeshこのように見てください...このJavaプログラムを実行すると、既にCLIアプリケーションを実行しています。したがって、サブプロセスの出力を表示する場合は、System.outにリダイレクトしてください。それが十分ではなく、別のウィンドウになければならない場合、 'cmd.exe/C start java HelperProgram' –