2017-02-01 5 views
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(); 


} 

答えて

0

cmd.exe /c startが近い、子プロセスを起動します。

入力を元のcmdに戻そうとしています(閉じています)。

代わりにcmd.exe /C RCMIClient.exe

+0

ありがとうパトリックを呼び出す必要があります。私は変更を加え、アプリケーションを開いたが、バックグラウンドで行った。あなたはそれをフォアハンドにする方法を知っていますか? – Rajesh

+0

@Rajesh "1 \ n"を送信した後にProcess.waitForを試してください –

+0

@Rajeshこのように見てください...このJavaプログラムを実行すると、既にCLIアプリケーションを実行しています。したがって、サブプロセスの出力を表示する場合は、System.outにリダイレクトしてください。それが十分ではなく、別のウィンドウになければならない場合、 'cmd.exe/C start java HelperProgram' –

関連する問題