|
Depoly Your SWT-JAVA to Mac OSX APP
這篇詳細步驟教你完成部屬java jar檔到Mac系統標準應用程式.app(點兩下即可執行)的所有細節,並且善用所有Mac系統中Xcode開發工具中的小工具,下方有網路上的相關教學資源,但是都教的非常模糊(包括官方Eclipse的範例,抓下來也不能動);最後還有一個OS X部屬SWT應用程式會遇到的經典bug:啟動SWT程式需要在Main Thread中。
一般command使用 java -XstartOnFirstThread -jar SWT.jar 需要多加一個VM Option,讓程式執行在住要執行序中,材可以順利執行swt應用程式。我們的目的是完成真正的.app檔案,所以我們重Eclipse開始教起。
首先確定你的swt應用程式可以在eclipse中編譯與執行,接著,選擇File->Export->Java->Runnable JAR file,下一個視窗中有三個關於使用到的library包裝方法的選項,選第一個(Extract requtred libraries generated JAR)。

其中包含Manifest.MF檔案也會自動產生,這個jar檔案在windows系統中應該點兩下就可以動了,但是在mac os10.7 Lion中起動不了,原因就是少了VM Option -XstartOnFirstThread,辛苦做完的應用程式如果使用黑黑的CMD視窗啟動,對我們programer來說還可以接受,但是對使用者來說會覺得是半成品。
進行app封裝前,先製作app的icon檔案icns。打開xcode附的Icon Composer軟體。將png檔案拖近程式中。

儲存icns檔案。
接著打開xocde附的Jar Bundler。


VM Option欄位請保持空白。稍後需要手動更改info.plist檔案。請先點選Create Application產生app檔案。
產生之後點兩下,如果java沒有呼叫SWT lib,程式已經可以執行,應用到swt請繼續看下去。
打開系統監視程式,觀看swt應用程式產生的error log檔案。

發現程式有著MAC OS X Lion對SWT應用程式經典錯誤,執行序必須執行在主執行序當中。針對這一點全世界的網站我都看片了很多人解釋,但是就是沒有講到重點,連原廠Eclipse(http://www.eclipse.org/swt/macosx/)教學範例檔案下載下來都不能在mac os x中執行。在此一次幫你解決,輸出錯誤如下:
12/3/25 下午2:01:08.506 [0x0-0x4bc4bc].SWTBrowser: [JavaAppLauncher] Requested [1.5*], launching in [1.6] instead.
12/3/25 下午2:01:08.950 [0x0-0x4bc4bc].SWTBrowser: ***WARNING: Display must be created on main thread due to Cocoa restrictions.
12/3/25 下午2:01:08.952 [0x0-0x4bc4bc].SWTBrowser: org.eclipse.swt.SWTException: Invalid thread access
12/3/25 下午2:01:08.952 [0x0-0x4bc4bc].SWTBrowser: at org.eclipse.swt.SWT.error(SWT.java:4300)
點選剛剛產生的app檔案,選擇縣市套件內容後

編輯Info.plist檔案,不建議自己用筆記本手工編輯,直接點選xcode應該會跳出專用的plist xml編輯器。
打開xocde plist編輯器,新增一筆key為StartOnMainThread,且型態為boolean的yes(xml中是true)項目,並保持在Java底下,如圖:

info.plist的xml對照如下:

不管你要用哪一種方式編輯,存檔後,大功告成。

Eclipse source code and project 檔案下載
[MAC APP] ArduinoTW SWT Browser link
[reference as follow][網路資源幾乎都是教一半,提到問題卻解決步驟沒交代清楚]
http://www.eclipse.org/swt/macosx/
http://macdevcenter.com/pub/a/mac/2005/04/22/eclipse.html
http://mchr3k.github.com/swtjar/osxapp.html
|