2013-05-30 73 views
1

當我嘗試這段代碼時,它似乎被執行,但它不被執行。文件不能從Java執行

進程生成器可以找到可執行文件。系統寫入println命令。

我發現了一些示例代碼,但我的可執行文件與java文件不在同一個文件夾中。

private static void executeOneFile(String folderPath) { 
    Process p; 
    String exePath = path + "\\" + folderPath + "\\"; 
    try { 
     p = new ProcessBuilder(exePath + "myFile.exe").start(); 
     //p = Runtime.getRuntime().exec("myFile.exe", null , new File(exePath)); 

     System.out.println("p is running"); 
     p.waitFor(); 
     System.out.println("p ended"); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
+0

然後會發生什麼?沒有錯誤或例外?你怎麼知道.exe沒有運行? –

+0

你能告訴你如何設置'path'變量嗎?你有什麼例外嗎? – Farlan

+0

沒有錯誤也沒有例外。 exe應該創建一個輸出文件,但它不會。當我雙擊手動它創建。 – karakale

回答

1

有幾個問題與上面的代碼:

  1. 你不標準輸入/標準輸出處理正確。所以也許有一個錯誤,但你不會看到它,因爲你沒有讀取子進程的輸出。
  2. 接下來,最好關閉孩子的stdinp.getOutputStream().close()以確保它不會掛起等待輸入。
  3. 最後,進程的當前目錄與Java VM相同。因此,如果您使用相對路徑來編寫文件,它將在某個地方結束,但很少出現在您期望的地方。將文件的絕對路徑傳遞給您的子進程,以確保輸出到達應該的位置。
+0

謝謝。 exe文件等待更多的輸入。所以我應該關閉流。我用這條線並修復了這個問題: \t Process process = pb.start(); \t process.getInputStream()。close(); \t process.waitFor(); \t process.getOutputStream()。flush(); \t process.getOutputStream()。close(); – karakale

+0

你搞錯了。首先,你必須關閉** process.getOutputStream()**,因爲這是** Java的**輸出流,它將是子進程**輸入** –