編者按:幾天前Javalobby中又出現了一篇名為關于Java你今年最大的想法是什么?的文章。Antonio Sorrentini闡述了他的觀點:希望Java在桌面端有更多的技術進步。其實作者去年的時候就闡述了這個愿望,但一年來這一觀點并沒有在Java社區引來共鳴。Antonio Sorrentini很是不解,為什么Java在桌面端這樣糟糕的表現卻沒有引來開發者的關注。來看原文:

我承認即使在JavaFX出現之前Java已經在桌面領域做出了一些重大的提升,比如Swing中的提升;我們現在也有了很棒的OpenGL;DirectX也有了很大的提升;啟動時間也顯著提升了。沒錯,Java在去年做了很多顯著而有效的工作。

然而不得不說的是,除此之外其他的仍是一塌糊涂。比如Java sound實際上并不好用,被遺棄的Java3D又如何呢?最近甚至JOGL也被Sun遺棄,包括很久之前的SwingLab;JAI(用作圖片處理)多年未真正升級過,看起來也沒有在什么地方得到利用,它迫切需要性能上的巨大提升以適應來臨的多核GPU時代所有這些應用于桌面領域的Java產品不是被遺棄就是成為雞肋。

而且很關鍵一點是,盡管我們可以用Java創建出桌面應用,但只要我們想開發真正的富桌面應用我們就無法真正使用Java而使用JNI、C/C++和平臺依賴的libraries等。

使用Java構建桌面應用更多的是困難和麻煩,比如即便想要在Java應用內創建一個高效的優良的web瀏覽器都是一件難事。而且沒有用Java編寫的圖片處理應用,沒有一個純粹的Java web瀏覽器,沒有數字音頻應用,沒有3D建模器,沒有矢量圖形編輯器,沒有先進的光柵編輯器Java今日在桌面端所到達的高度只能滿足那些服務器開發者,因為他們只需要在遠程服務時使用電腦桌面上的簡單界面。

過去我們一直說這是因為Java太慢,無法在一個慢的平臺上開發出如此復雜的應用。但我們這樣說是錯的。原因有兩點:一,Java從來就沒有慢過,即便有些部分曾經慢過,但沒有人懷疑當它需要被用到服務器端時它會迅速地得到提升,比如JITs,GCs等。這一點也正是Java語言卓越的地方。二,由于Java平臺的天然特性,Java應用總是第一個利用市場上新硬件和新操作系統的應用。一旦JVM被配置到了一個新系統中,幾乎不需要任何編輯和調試,Java應用就可以在上面全速運行。比如你在32位的操作系統上開發了一個應用,它就可以全速運行在Windows 7 或者Solaris的64位JVM上。所以所謂的Java太慢根本不能成為Java在桌面端碌碌無為的借口。

而且,如果你是一個終端用戶,你甚至不需要從網站上重新下載應用,這意味著不僅終端用戶和開發者得到了速度提升,甚至應用的執行性能的前邊也得到了速度提升。今天,JIT在runtime為本地操作優化代碼已經做得很棒了,這意味著你可以挖掘出你運行的硬件的全部的能力,這是一個靜態編譯語言永遠也無法競爭過的性能,只是這個性能如果可以運用到桌面端和游戲領域就好了

我們總是說:由于Sun總是一個服務器端公司的原因,Java在桌面端一直沒有真正的機會。而Oracle的收購讓這種境況看起來不會有什么改變。希望這不要再繼續下去,為了Sun、Oracle和Java自身的利益,Oracle內部的知名人士應該提醒公司來讓他們知道:如果缺乏了在桌面端的能力和效率,必將影響Java的普及率甚至它在服務器端的占有率。

我們一直以來習慣著Sun主要提供服務器端服務,因而想象著未來更多的處理能力還是出現在服務器端,而客戶端不過是連接服務器的簡單服務。這種情況已被證明是絕對錯誤的。因為未來的桌面應用將服務、應用與硬件所有的運算能力相結合,大量的數據和解碼、聲音、圖像、視頻被開發者處理,而且用并行編程的方式來實現,既保證了豐富的性能又保證了速度。對開發者來說,未來的服務既需要他們在客戶端處理也需要在服務器端處理:執行復雜的搜索、圖像、視頻以及虛擬3D環境需要服務器端的技術,而遠程服務如醫學分析、遠程教育和遠程會議等則需要客戶端能力。

只是令我們感到失望的是歷史又一次地重復了,因為至今Java中還沒有什么大的動作。

Armin Ehrenreich 在回復中說道:說的好,我完全認同。

確實迫切需要跨平臺的桌面應用技術,而且我不認為C++結合Qt是個好的選擇。你說闡述的問題之所以沒有引起很多的共鳴,我想是文化上的問題。許多Java社區的人們包括Sun內部的負責人無法理解你所說的,所以我斷言Oracle也不會對Java做出什么大的改變。

客戶端現在基本上被微軟和Apple包攬。到Cocoa論壇中會發現他們談論的是GUI的可用性、響應性、終端戶如何處理桌面應用等而我們的論壇呢,大部分人認為應用的未來在服務器端。這就是文化上的差異。

但是桌面技術需要做很多工作,Swing很慢很慢地進化,連同Netbeans平臺、Java3D, JOGL等應用勉強成為了桌面端的一個選擇。但Sun置此境遇于不顧,只是模仿Flash發布了一款新的腳本語言,但是那些API只有使用JavaFX才可用

Jeff Martin回復道:正確的觀點,但我有一點不同。Sun真正的問題是他應該吃自己的飯,用自己的力量來用Java寫一些實在的桌面應用,這可以證明他們關于Java在桌面端的承諾,證明他們可以寫出應用、提升框架和工具。我不認為另一個框架會幫助Java。

James Sugrue回復道:我同意作者觀點,我也很支持桌面端開發。看看現在處于開發中的Eclipse. e4中的一些項目,它們為桌面和瀏覽器提供了一個解決方案,所以我想還是有一些希望的。但我認為我們不需要過分聚焦于桌面端,JavaFX是正確方向上的一個邁進,只是無法在Swing和Java3D/JOGL中看到應用提升。

Osvaldo Doederlein回復道:我認為JOGL的支持沒有那么糟糕,畢竟它是JavaFX Desktop Runtime的一個依賴。實際上,我們可以寫一個非JavaFX的小程序,而且不需要請求本地代碼的許可性就可以配置。



dm520