談談對於JavaFX開發的感想

ml3947發表於2014-12-18

   從2008年釋出的第一個JavaFX版本開始,在這幾年裡,斷斷續續的利用業餘時間進行JavaFX的學習和開發,也懷有用JavaFX進行遊戲開發的想法。

   不過目前決定暫時減少JavaFX遊戲開發相關的內容,僅僅將JavaFX作為一個Java的GUI來進行開發自己的工具和軟體,除非後續Oracle有重大的更新和改變現狀的措施。

   下面我會談談在JavaFX開發中遇到的一些問題,以及和其他幾種技術相比的不足和缺陷。

   首先的問題,自然是我為什麼會選擇使用JavaFX

   這個原因很簡單,對於大多數想要使用JavaFX的人來說,無外乎只有一個原因:自己是javaer。

   從讀大學開始我就是自學Java的,大學的時候用Java做過各種遊戲,軟體,畢業後從事Android開發工作,後來又對Unity3D感興趣,轉向Unity3D開發,期間做過C#的專案,也做過幾個C++的專案,但從某種程度上來說,Java才是我最熟悉的語言。你可以說,"語言只是工具,專案需求什麼就做什麼",但這也不能否認每個開發者都有自己最熟悉和最喜歡用的開發語言以及工具。

   就像C#的開發者會使用Silverlight一樣,Java開發者大多會選擇JavaFX。不過對於微軟的追隨者來說,還是很幸苦的。微軟的技術更新很快,幾乎3年左右就會丟棄,重新開發。從Winform,WPF,到Sliverlight(事實上Sliverlight已經被微軟放棄)。由於WP8的遊戲開發技術XNA已被微軟放棄,所以WP8進行一次大的革新也是必然的結果。還好,微軟財大氣粗,也不靠這發財。

   JavaFX從08年底開始問世,中間經歷了SUN被收購,後來又推出2.x版本至今。

   當然,對於現在的Oracle來說,Java不算什麼,JavaFX更不算什麼。目前JDK和JavaFX都已經有開源專案OpenJDKOpenJFX了。

   這樣也導致了很多的問題,去年由於JDK連續爆出重大漏洞,導致JDK8推遲了半年釋出。另外從JavaFX來說,OpenJFX目前已經很久沒有什麼重大更新了,3D不算。因為JavaFX 3D目前幾乎無法完整的應用到專案中,比它優秀成熟的3D技術很多,秀逗了才會選它。而OpenJFX裡面又有很多分支,3D模組是單獨一個分支進行開發,還有個JavaFXPorts,主要是進行JavaFX在移動平臺Android和IOS上執行的研究。

   然而即使是JavaFX部署到Android和IOS上的步驟也很繁瑣,還會有很多的API相容性問題。從某種方面來講,JavaFX應用到Android和IOS上目前也只是可行,無法實際廣泛應用。

   接下來的問題才是重點,由於Java之前連續爆出重大漏洞,目前的Java Applet程式必須要在Java安全性為中或者高的情況下才能執行,否則只會彈出下面的對話方塊。


    目前即使是釋出到網站上,如果沒有經過正規機構頒發的簽名,是無法執行的(自簽名也不行)。這樣對於普通的開發者來說,幾乎是完全無法在網站上釋出自己的JavaFX應用。

    除非是自己新增指定的站點到例外列表裡,如下圖:


    然後即使是你新增到了站點列表了,又會彈出下面一個大框:


   你覺得任何一個訪問某個站點的人,會進行這樣一系列的操作之後,在彈出一個大框告訴你存在安全風險,還會固執的留在這個頁面嗎?

   我相信沒有一個人會,除了開發者。

   但是如果JavaFX不釋出在網站上,那麼它就已經失去了和其他技術競爭的資本了。畢竟在本地使用的話,可替代的更好的技術比比皆是,JavaFX毫無存在感。

   所以說在不考慮效率的問題下,JavaFX目前有以下問題阻礙發展:

   1.OpenJFX模組較多,負責各個模組的同時開發的團隊估計不少,但是很多卻都是半成品,無法應用。就像上面說的3D模組,應用到Android和IOS,即使是匯出為本地程式和安裝包,也會有"安裝包圖示很難的修改,安裝介面無法定製"等各種問題,除非自己手動使用Inno Setup,exe4j等打包,但通常開發工具都是減少工作量的,沒見過這種要自己修改增加工作量的。

   2.Java Applet在網路上執行限制太多,自己開發的程式幾乎完全沒法放在網路上讓大家執行使用,雖然這是因為Java會請求訪問本地檔案的許可權導致安全性不好,但為何不限制Applet程式無法訪問本地檔案,最好是做一個mini sdk專門進行網路分發的程式和遊戲開發。

   3.幾經縮減,但是JRE的大小還是太大。我做的Unity遊戲放在網路上,別人分分鐘就可以下載Unity的執行環境並執行,但是下載JRE耗時太長,沒人願意等候太久。更何況,Java外掛本身就是屬於冷門外掛,用的人太少。

   4.JavaFX目前讀取資源,在eclipse IDE上執行,本機執行和Web執行都存在差異。至於能不能找到兩全的解決方式,我也未進行深入研究。

   當然,還有其他的問題,我就不一一列出了。

   目前比較火的,那自然當屬HTML5了,不過根據我執行了一些市面上已經有的Demo,發現手機上的體驗不行,很多demo只有十幾的FPS,而且不是專門為手機定製的頁面的話,在手機上執行也沒啥體驗可言。不過最重要的優點就是各個平臺都可以執行,即使是不支援flash的ipad等裝置也能執行,由此看來HTML5也有一定的潛力。

   不過Unity3D也加入了這場大戰,在Unity3D 5的預覽版裡面,已經可以匯出為HTML5了,採用了WebGL。效率的話,也還可以,當然肯定是比native差很多。現在暫時不支援mobile,我在手機上嘗試過執行官方的示例,發現可以載入,提示不支援手機,但可以繼續載入,執行,不過無法點選。但都是遲早的事,所以說Unity3D也是一個有力的競爭者。

   相對而言,JavaFX就遜色了很多,各個方面都有不少的差距。

   個人建議,JavaFX當作Swing的替代品就好,進行遊戲開發目前還是不是很適合。

   本文章為個人原創,轉載請註明出處,本人CSDN部落格:http://blog.csdn.net/wingfourever 個人部落格地址:http://www.wjfxgame.com

-----------------------------------------------------------------------

   很少沒寫這麼長的內容了,不過最近越來越發現JavaFX進行遊戲開發的問題很多,當然作為GUI技術還是不錯的,我也用它做了很多工具和軟體。

   如何取捨就看大家的選擇了。

   JavaFX的教程也還是會在CSDN和我的個人部落格上更新。

----------------------------------------------------------------------

 

相關文章