2016-06-28 65 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(); 
    }  
}