不知道有多少人跟我一樣,在開發Java應用程式時,會針對Mac OS X平台進行UI的微調,Java官方雖然希望讓大多數的Java程式在各個平台看起來一樣,但說實在話,Java UI的色調和設計實在不怎麼好看,所以Apple特別為OS X提供特製版的JVM,讓Java程式在OS X上執行時,比較像OS X上原生的程式,這一點和SWT的出發點有點像。不過,OS X在UI的許多細節上跟其他平台不同,例如視窗沒有獨立的選單列(跟系統選單整合)、工具列的按鈕會根據位置有不同的外觀、在系統選單列會顯示程式名稱等等,這些細節都可以在《Java Development Guide for Mac》中找到所有需要微調的方法和參數,但這都是一些和功能無關的芝麻小事。

  舉例來說,將原本在Windows平台執行得好好的Comic Surfer來說,完全不改搬到OS X上,執行起來就像圖1 (點圖會放大顯示),一整個就是怪,特別是預設將Class的完整名稱(含Package名稱)當成程式名稱顯示在系統選單列上就很怪,所以Comic Surfer在一開始就針對OS X進行微調,變成圖2,另外指定程式名稱、將選單列整合到系統列中,對應OS X的系統快捷鍵(例如Command + Q)、置中工具列、並根據位置調整按鈕的外觀,讓Comic Surfer比較像是OS X上的程式。

未經過微調,所以直接以class的完整名稱當成程式名稱(很詭異),選單列也沒有跟系統選單列整合,工具列的按鈕各自獨立,不像是OS X程式的風格。
圖1 未經過UI微調的Comic Surfer 

AppWithOptimization_v6
圖2 經過UI微調的Comic Surfer

  但Apple官方提供的JVM在版本開發上都比Oracle (Sun)來的慢,所以Comic Surfer有些功能就變成Windows版有支援,但Mac版不支援,例如在有安裝JVM 7的Windows上,Comic Surfer可以讀取內含中文檔名的ZIP壓縮檔,但Apple遲遲不更新OS X的JVM,這功能也就沒辦法提供了,還好這可以用Simple Factory就簡單搞定,但稍微有點討厭就是了。後來Apple放棄更新JVM,將原始碼提交給OpenJDK和Oracle,讓Oracle負責提供OS X版的JVM,當時我就有點擔心,Oracle版的JVM在UI的細節上會不會有誤差啊?果然,在安裝完Oracle提供的JVM後,Comic Surfer執行的畫面變成圖3,工具列按鈕的上下框線不見了,整個工具列看起來就是很醜Orz,而且還有個地方怪怪的,不知道有沒有人看出來了,程式名稱少一個空白,這應該是Oracle版JVM的臭蟲,因為我在程式碼明確指定程式名稱,但Oracle版的JVM卻使用Class名稱當作程式名稱(還好沒有像圖1依樣用完整的Class名稱)。

AppWithOptimization_v7
圖3 不正確的工具列按鈕框線

  如果事情就這樣也就算了,使用JFileChooser時,我更發現一件怪事,同樣的程式碼,只是使用不同的JVM啟動Comic Surfer (在OS X上切換JVM還蠻方便的),開啟同一個目錄時,檔案選擇對話框中,使用Oracle版的JVM,有中文名稱的檔案或資料夾消失了,在Google搜尋發現很多人也遇到這問題,但我一直更新到目前最新的J2SE 7 Update 6,這問題依舊在,如果眼睛再尖一點的人會發現,OS X原生的JVM會根據Locale顯示中文的說明(名稱、修改日期、檔案格式、取消和選擇),但Oracle版的JVM都是顯示英文的說明。

FileChooser_v6 
圖4 有中文名稱的資料夾正常顯示(OS X原生JVM)

FileChooser_v7 
圖5 有中文名稱的資料夾不見了(Oracle J2SE 7 Update 6)

  以上是我在開發Comic Surfer時發現到的差異,有些差異也許能靠撰寫OS X專用的程式碼解決,有些可能就只能等Oracle把臭蟲修掉,說不定接下來Java版的Comic Surfer專門用在Linux和Android平台,然後把相同的設計用Objective C開發OS X和iOS版,然後用C#開發Windows版(應該能通吃PC和平板吧)吧!

創作者介紹

Spirit的異想世界

dbi1463 發表在 痞客邦 PIXNET 留言(0) 人氣()