2011-03-27 49 views
0

我想運行一個C/C++程序的使用exe文件java的.......並處理其輸入和輸出C可執行文件......處理用java

我的代碼是

import java.io.*; 

class run2 { 
    public static void main(String[] args) throws java.io.IOException { 

    String[] command = new String[3]; 
    command[0] = "cmd"; 
    command[1] = "/C"; 
    // command[2] = "java Run1"; 
    command[2] = "start C:\\WE.EXE"; 

    Process p = Runtime.getRuntime().exec(command); 
    String i = "20"; 

    BufferedReader stdInput = new BufferedReader(new InputStreamReader(
     p.getInputStream())); 
    BufferedWriter st = new BufferedWriter(new OutputStreamWriter(
     p.getOutputStream())); 

    String s = null; 
    System.out.println("Here is the standard output of the command:\n"); 
    s = stdInput.readLine(); 
    System.out.println(s); 
    st.write(i); 
    st.newLine(); 
    st.flush(); 
    while ((s = stdInput.readLine()) != null) { 
     System.out.println("Stdout: " + s); 
    } 

    try { 
     System.out.println("Exit status = " + p.waitFor()); 
    } 
    catch (InterruptedException e) { 
    } 
    stdInput.close(); 
    } 
} 

我得到它說管道已關閉 就幫我出個錯誤.....

+3

請包括跟蹤和一切的完整錯誤 – 2011-03-27 02:54:51

回答

0

嗯,首先,如果沒有在C:/一個WE.EXE,這可能是一個問題。如果沒有進程啓動,當然你不能對其輸入/輸出管道做任何事情。

但是,假設你有一個WE.EXE,你的錯誤可能是在:

st.flush(); 

你的應用程序在命令提示符下,或cmd.exe,開放WE.EXE,將採取誰了標準輸入和標準的護理輸出。您的電話stdInput.readLine();將等到WE.EXE,因此cmd.exe終止,此時輸出流將被關閉(並且您顯然無法寫入到已關閉的管道中)。

所以,如果你想自己處理輸入和輸出,你應該直接啓動WE.exe,如:

Process p = Runtime.getRuntime().exec("C://WE.EXE"); 

此外,您可以考慮使用ProcessBuilder,而不是Runtime.exec


小細節,但可以考慮使用Java's naming conventions ----例如,你的類名是RUN2(或更具描述性的),而不是RUN2。

0

您正在嘗試從尚未存在的流(stdInput)讀取數據。 直到WE.EXE程序寫入內容纔會存在。

只需等到您發送命令到程序。 換句話說,拿出第一個輸入行,它會正常工作。

 
//s = stdInput.readLine(); 
System.out.println(s); 
st.write(i); 
st.newLine(); 
st.flush(); 
while ((s = stdInput.readLine()) != null) 
{ System.out.println("Stdout: " + s); }