2016-06-28 141 views
0

我有一個在C++(cf.exe)上生成的可執行程序,它從幾個文本文件(.txt)獲取參數,執行一些計算,並創建一個包含結果的文件(results.txt )。這個程序不需要交互。一旦執行,計算完成後,它會自動關閉。Java - 執行外部exe文件

然後,我有其他程序在Java上,其中包含一個執行cf.exe的按鈕。當按下按鈕時,將調用以下方法:

public void executeExternalProgram(){  
     String filePath = "C++" + File.separator + "cf.exe"; 
     try {   
      System.out.println("Executing C++ exe..."); 
      Process p = Runtime.getRuntime().exec(filePath);;   
     } catch (Exception e) { 
      e.printStackTrace(); 
     }  
    } 

我沒有收到任何錯誤,但按下按鈕時cf.exe未被執行。當我手動執行cf.exe時,結果文件被正確創建。此外,我試圖將其他程序(如notepad.exe)複製到同一個文件夾中,並通過Java執行,沒有任何問題。任何人都可以看到爲什麼它不工作?

+1

嗯,我將打印完整的文件路徑和東西;並且例如確保該字符串確實指向現有文件。你也可以從你的過程對象中打印出exitValue()。 – GhostCat

+0

您的路徑似乎是'C++ \ cf.exe',它將與您的應用程序的當前工作目錄相關。請按照Jägermeister的建議,檢查/發佈你的絕對路徑。 – Thomas

+0

是的,這是一個相對路徑。我已經嘗試了其他程序,並且它不是路徑問題 – David

回答

0

我發現改變給予該過程的命令可以正常工作。變化如下:

Process p = Runtime.getRuntime().exec("cmd /c start "+ filePath); 

然後,該方法的更新代碼,當按鈕被按下稱爲:

public void executeExternalProgram(){  
    String filePath = "C++" + File.separator + "cf.exe"; 
    try {   
     System.out.println("Executing C++ exe..."); 
     Process p = Runtime.getRuntime().exec("cmd /c start "+ filePath); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    }  
}