2016-11-30 60 views
0

我想在啓動外部程序時使用參數(其中一個參數是將配置文件加載到該外部程序)後單擊javafx應用程序的按鈕(btn事件不是包括在代碼中)但我想知道爲什麼它一直給我錯誤!如何在Java中使用參數執行外部程序

我的IDE是InjellJ IDEA社區版

我知道這個問題是重複的,但這裏給出的這個平臺已經嘗試過,沒有sucess的所有例子中不過我的代碼中包含的配置文件作爲變元的

的一部分

下面是代碼

private String appDomain = Paths.get("").toAbsolutePath().normalize().toString(); 
private String exepath = appDomain+"\\src\\bin\\exeResources\\MyExe.exe"; 
private String exeargs = appDomain+"\\src\\bin\\exeResources\\MyExe.ppx silent-load"; 

try { 
     Runtime r = Runtime.getRuntime(); 
     r.exec(exepath +" "+exeargs); 
    } catch (IOException e) { 

     e.printStackTrace(); 
    } 

當我刪除 「exeargs」 我的錯誤 CreateProcess的錯誤= 193,%1不是有效的Win32應用程序

讓我很難知道「exeargs」可以用上面的代碼片段。

您的幫助將不勝感激

編輯

的EXEFILE和execonfig我有

System.out.println(exepath+" "+exeargs); 
加載位於包的一個在我的項目 **bin.exeResource** 打印路徑和args

給我

C:\Users\{MyUser}\OneDrive\IntelliJ IDEA Projects\MyProject Package\src\bin\exeResources\MyExe.exe ...\src\bin\exeResources\MyExe.ppx silent-load 

加入錯誤

CreateProcess error=193, %1 is not a valid Win32 application 
+2

您是否打印過「exepath」的結果?它是否包含任何空格?事實上,你確定可執行文件在那個路徑中嗎?看起來你正在尋找一個相對目錄,如果你的當前目錄不在'src'目錄之上,那麼這個目錄可能會失敗。 – RealSkeptic

+0

該.exe文件是完整的先生! 和我編輯的問題,並添加輸出,當我嘗試打印參數和我得到的錯誤! 請注意,該.exe文件位於軟件包bin \ exeResources –

+0

啊,所以路徑中有一個空格。 「IntelliJ IDEA項目」 - 包含空格。所以它認爲命令是'C:\ Users \ {MyUser} \ OneDrive \ IntelliJ'並且失敗。我將把它作爲一個副本來關閉它。 – RealSkeptic

回答

0

有一個exec方法專門爲您的目的重載。它需要一個String數組來存放命令和參數。這似乎正是你需要的。請看API

+1

非常感謝你解決了我的問題! –

+0

太好了,我很樂意提供幫助,爲什麼不提高答案的答案並將其標記爲解決問題的答案? –

+0

我upvoted你,但stackoverflow給了我一個通知,如果我的聲望小於15 Uptvote不向公衆顯示 –

1

我覺得你對於exe的參數感到困惑。試試這個:

private String appDomain = Paths.get("").toAbsolutePath().normalize().toString(); 
private String exepath = appDomain + "\\src\\bin\\exeResources\\MyExe.exe"; 
private String exeargs = "silent-load"; 

try { 
     Runtime r = Runtime.getRuntime(); 
     r.exec(exepath + " " + exeargs); 
    } catch (IOException e) { 

     e.printStackTrace(); 
    } 
+0

請注意,有了這個參數,你省略了加載配置文件名稱的選項或「exe config」再次檢查「exeargs」! ** ... \\ MyExe.ppx silent-load ** –