2016-06-25 184 views
1

我不確定如何啓動外部應用程序(特定於Windows)至Java代碼。我不打算使用這個Java代碼Mac/Linux,所以我們來關注Windows代碼。Java - 執行外部Windows應用程序?

我已經完成

我一直在研究這個問題,在過去的兩天,我還沒有找到答案。我很容易找到Runtime.getRuntime().exec()的方法,但事情是我無法找到從我的本地工作區啓動一個批處理(.bat)文件IntelliJ Idea

就是我要問

我只是想知道如何在我的工作區執行本地批處理文件(在像com.example.batch的文件夾)和/或如何執行文件(.exe)或(.bat)與直接文件地址。 (例如,碎片整理和優化驅動文件(.exe)的的WindowsC:\WINDOWS\system32\dfrgui.exe

感謝所有提前,我一直渴望着這個答案。

+0

你有沒有嘗試類似[這個問題]的答案(http://stackoverflow.com/questions/615948/how-do-i-run-a-batch-file-from-my-java-application) ? –

回答

1

你看過必備的Runtime.exec() article嗎?

本文的第2頁列出了一個常見的錯誤:Runtime.exec()不是命令行

.bat文件不可執行文件。它們是指令的集合。像Linux中的shell腳本一樣,您需要一些實際執行這些指令的東西。

你在這種情況下可執行文件是cmd.exe,這將需要/Ccom.example.batch作爲參數:

Runtime.getRuntime().exec(new String[] { "cmd.exe", "/C", "com.example.batch"}); 

作爲一個側面說明,檢查出ProcessBuilder類。它比Runtime好得多。是的,Runtime文章中的所有規則適用於ProcessBuilder

+0

很好的答案。我選擇它是因爲你專注於一個你完整詳細描述的主題。謝謝! – VenHayz

2

首先,您應該使用ProcessBuilder來執行外部程序,以獲得比Runtime.getRuntime().exec()更易於使用的界面。

其次,要執行.bat文件,您只需執行cmd.exe並在/C選項中傳遞批處理文件名。請注意,當您運行一個批處理文件時,您正在啓動一個DOS cmd處理器並告訴它運行批處理文件,而不是從終端讀取。因此,批處理文件必須位於cmd.exe可訪問的位置。因此它不能位於包含Java程序的jar文件中。如果有必要將它分發到jar中,你將不得不將它複製到某個地方的文件系統。

+0

(關於第二個選項)是否允許我從項目工作區啓動.bat? – VenHayz

+0

請參閱我編輯的答案。 –