2012-06-26 29 views
0

我已經用Java編寫了一個程序,並且有一個可執行的jar,客戶需要在Windows或Mac機器上打開。我的一些客戶是......而不是電腦人。因此,我需要編寫兩個腳本(如果有人知道如何使用Mac和Windows的單一腳本執行此操作,那將非常棒),可以通過在Mac和Mac上雙擊來自動啓動可執行文件jar視窗。如果Java安裝正確,腳本應該沒有任何問題。如果沒有安裝Java,那麼他們應該知道的更好。在多個操作系統上啓動帶有腳本的可執行jar

這是我的Windows機器批處理腳本:

start javaw -jar ExecutableProgram.jar 

不過,我不能確定,以使在Mac機器什麼樣的腳本。 我應該使用哪種類型的腳本?

AppleScript? SH? 它需要能夠通過雙擊來執行。

+0

由於IzPack中的標記不起作用,因此無法通過雙擊腳本來運行可執行jar。在Windows中可以使用上面的批處理腳本。 – CODe

回答

2

在Mac OS X,在罐雙擊應該會自動打開。但是,我沒有一個好的方法來測試這個;因爲我是一名開發人員,所以我的電腦特意做了很多事情:-)特別是,蘋果自己的Java運行時從10.6開始不推薦使用,我不知道其他Java運行時隨附什麼工具。儘管如此,如果這種方法有效(正如我認爲的那樣),這是最好的選擇。

如果不行,下一個最好的辦法是使用AppleScript,如adayzdone建議。我將使用AppleScript的反而會是這樣的:

do shell script (¬ 
    "cd " & quoted form of POSIX path of (path to me) & "/.. ; " & ¬ 
    "java -jar ExecutableProgram.jar") 

quoted form of ...位得到腳本路徑(path to me),將其轉換爲UNIX路徑(POSIX path of ...),並引用特殊字符的外殼(quoted form of ... );由於腳本在目錄中運行,因此還需要/..才能到達Jar所在的父目錄。要進行雙擊,將文本複製並粘貼到AppleScript Editor中,並在「保存...」對話框中將文件格式設置爲「應用程序」。 (要編輯它,請從AppleScript編輯器內部打開該應用程序。)此方法的缺點是您將運行兩個應用程序:真正的Java應用程序和Mac shell。有兩種方法解決此問題:

  • 如果命令的命令行輸出並不重要,對AppleScript的第三行中的字符串更改爲"java -jar ExecutableProgram.jar &>- &"&>-關閉輸出流,並&到在後臺運行它。 (只需&將無法​​正常工作。)
  • 更多地參與方法不退出的AppleScript,只是隱藏它:
    • 在你的AppleScript應用程序右擊並選擇「顯示包內容」
    • 導航到Contents/文件夾並打開Info.plist
    • 添加關鍵LSUIElement與價值true
      • 如果它在一個純文本的XML格式(不是非此即彼),你可以添加<key>LSUIElement</key><true/>
      • 從命令行,這是defaults write /full/path/to/Info LSUIElement -bool true(請注意,您需要以/,開頭的完整路徑,例如,通過使用"$(pwd)/Info"獲得,但你不能提供.plist擴展名)。
      • 您也可以使用Apple的「Property List Editor」應用程序,該應用程序(至少以前用)隨開發人員工具一起提供;免費的第三方財產清單編輯也存在。

如果不工作,這樣的事情絕對簡單的方法是寫一個Unix shell腳本,而不是一個Windows批處理腳本。它必須與.command擴展名一起保存,並設置其可執行位(chmod +x file.command)。內容應

#!/bin/sh 
cd "$(dirname "$0")" 
java -jar ExecutableProgram.jar 

(如果你不熟悉的Unix shell腳本:第一行聲明這是一個shell腳本;第二行進入目錄中的shell腳本中;第三個行執行相關操作)。這種方法不太理想的原因是它會打開終端(OS X的命令行界面)。你會看到一個窗口,在腳本結束之前一直保持打開狀態;當腳本終止時,所述窗口不會(或不可以)關閉;終端不會自行退出。因此,更明顯的是二等公民。

+0

嗯,希望我可以運行來自IzPack的chmod命令使腳本可執行,否則這將不能滿足要求。不過,非常感謝他們深入的解釋。另外,由於該腳本位於相同的目錄中,因此不需要cd命令。 – CODe

+0

@CODe:實際上,'.command'文件是從用戶主目錄運行的。雙擊'foo.command'打開一個shell並運行(在該shell中)'/path/to/foo.command; exit'。我想你也可以使用'java -jar「$(dirname」$ 0「)/ ExecutableProgram.jar'。我從來沒有使用過IzPack,但是[FAQ](http://docs.codehaus。org/display/IZPACK/FAQ + - +常見問題+問題#FAQ-Frequentlyaskedquestions-MacOSXExternalPackages)似乎表明你可以使用''使文件可執行。 –

+0

啊,我認爲它和shell腳本很相似。不幸的是IzPack很漂亮,我嘗試了標籤,並且它不會使文件成爲可執行文件,無論我更改了哪些條件變量。看起來客戶將不得不在Mac上搞清楚。 – CODe

0

儘管我不確定java命令,但可以將此AppleScript作爲應用程序保存爲雙擊運行的應用程序。

set theFolder to quoted form of "/Users/CODe/Desktop/yourFolder" 
    do shell script "cd " & theFolder & " ; java -jar ProfessionalMediator.jar" 

您可以在終端通過保存爲一個應用一個AppleScript也執行此:

tell application "Finder" to set theFolder to POSIX path of (file (path to me)'s container as alias) 
tell application "Terminal" 
    activate 
    do script "cd " & theFolder & " ; java -jar ProfessionalMediator.jar" in window 1 
end tell 
+0

這可能是我正在查找的內容,可以將它保存到文件並在雙擊時自動運行?還是需要先保存爲應用程序?道歉,我對AppleScript知之甚少。 – CODe

+0

此外,該腳本將被放置在與ExecutableProgram.jar相同的文件夾中,因此與上面使用的目錄結構相比,該腳本將如何查看?該程序正在安裝在不同類型的系統上,所以我不會總是知道目錄結構。 – CODe

+0

如果您沒有將腳本保存爲應用程序,則必須從腳本編輯器運行腳本。有兩種方法可以輸入正確的posix路徑。您可以將目標文件夾拖動到腳本(在腳本編輯器中打開)或按照Antal的建議,將文件夾設置爲(file(路徑到我)的容器的POSIX路徑作爲別名) – adayzdone

相關問題