2016-06-28 39 views
0

いくつかのテキストファイル(.txt)からパラメータをとり、計算を実行し、結果(results.txt)を含むファイルを作成する実行可能プログラムをC++(cf.exe) )。このプログラムは対話を必要としません。実行されると、計算が完了すると自動的に閉じます。Java実行外部exeファイル

次に、cf.exeを実行するボタンを含むJavaで作成された他のプログラムがあります。ボタンを押すと、次のメソッドが呼び出されます。

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()をprintlnすることもできます。 – 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(); 
    }  
} 
関連する問題