2010-05-20 60 views
1

启动外部控制台应用程序我需要运行外部控制台应用程序。随着窗口的一切都OK:在Java应用程序中从Java

try { 
System.out.println("Running..."); 
    Runtime.getRuntime().exec("notepad.exe"); 
    System.out.println("End."); 
} 
catch(Exception e) { 
    System.out.println(e.getMessage()); 
} 

成功启动记事本。

但是,如果我把D:\\MyProg.exe.bat甚至cmd.exe(这是它作为记事本是路径)它不起作用。没有任何豁免。刚:

Running... 
End. 

回答

-1

这是因为记事本放置在特殊的文件夹,并在Path变量存在此文件夹。使用以下行

运行cmd

Runtime.getRuntime().exec("cmd.exe /c start"); 

运行其他应用程序:

Runtime.getRuntime().exec("cmd.exe /c start C:\\path\\to\\app.exe"); 
+0

但cmd.exe也在“PATH”中。但它不起作用。此外,我preicse路径“D:\\ MyProg.exe”,但它没有帮助。 我需要在哪里执行“开始”?在java中? – Andrew 2010-05-20 12:28:50

+0

是的,我想,但正如我上面提到的Runtime.getRuntime()。exec(“your.bat”); 也不起作用 – Andrew 2010-05-20 12:39:41

+0

它只是不会启动* .bats – Andrew 2010-05-20 12:40:33

3

首先,最有可能Runtime.exec()异步返回,所以才打印 “结束” 永远是可行的,因为exec调用立即返回,这就是你所看到的。

还有一些其他问题可能会在这里显示。我认为正在发生的事情是,您正在调用的程序可能正在输出标准输出上的I/O,而您无法阅读,或者您可能需要在退出java进程之前执行wait for it to finish。关于Runtime.exec()的各种问题,你应该阅读一下great article,它涵盖了这个问题和其他问题。