1. 程式人生 > >為什麼很多人說 Java 不適合編寫桌面應用?

為什麼很多人說 Java 不適合編寫桌面應用?

Java的桌面程式並不少,其中最為知名的莫過於Eclipse。在Linux和Mac下,Java程式的比例遠高於Windows下。

不過,“Java不適合寫桌面應用”的說法有一定道理,論調的主要背景是供Windows下使用的企業桌面應用的開發。由於一些歷史和定位的原因,對於這種GUI程式的需求,Java的優勢不明顯,劣勢比較明顯。

這事還得從Java的傳統,“跨平臺一致性”說起。
在寫後臺邏輯的時候,跨平臺是好東西。很多公司都是在Windows下開發,在Linux下部署,方便。
但涉及到GUI的時候,跨平臺就成了個“看上去很美”的東西。理論上,我寫個視窗,在Windows和Mac下都一樣能用,那是多麼美好的事啊。但實際上,每個平臺提供的GUI控制元件多多少少有點差別,一堅持跨平臺,麻煩就來了,該支援多少控制元件,怎麼支援呢。

一開始,Java的思路是:那簡單啊,有原生控制元件幹嘛不用,至於不跨平臺的,就不支援唄,又堅持了原則,又迴避了問題。這一代的gui庫,awt,就此誕生。
因為Java一開始是一根筋想推廣Applet的,只是“順便”也支援本地應用,設計成這樣不能說不合適,畢竟,HTML也是同樣的思路,只支援幾種最基本的控制元件。
但對於想開發複雜點介面的人來說,就有麻煩了。想來個目錄樹吧,對不起,不支援;想來個進度條吧,對不起,不支援。旁邊放著Delphi和VB這麼方便的東西,哥幹嗎受這氣啊。

這樣一來,Java自己也覺得說不過去了。但又要跨平臺,又要提供豐富的控制元件支援,那就只有另起爐灶,開始用第二種思路:自己動手、豐衣足食,自己重寫一套GUI控制元件,代替作業系統的原生控制元件。這一代的gui庫,叫做swing。
這也是一個想“徹底”解決問題的思路,但是要付出代價。
代價之一就是效率。我們可以參考一下另一個相同思路的產品——flash。為了實現向量動畫,在flash的那個小框裡,圖是一幀一幀地算出來的。接下來的事情我們都知道了:複雜的flash動畫極耗cpu;iPhone說,您太耗電了,俺就不支援了;Adobe說,那好吧,那俺也不費心折騰移動版flash了。
自己畫出來的控制元件畢竟不能跟原生控制元件比效率,尤其是在早期Java優化還不夠完善的時候。而且,自力更生的目的只是為了平臺相容,不是為了更好的效果,這事兒其實怎麼想怎麼虧。
代價之二就是效果。自己畫的控制元件畢竟只是模擬,還是會有細節差別。比如著名的毛玻璃效果,這不是簡單套樣式就能套出來的。
而且,各個平臺控制元件的風格本來就不一樣,雖然swing提供了幾種外觀,但大部分程式出於偷懶或是跨平臺一致考慮,還是使用預設外觀。預設外觀跟平臺不一致倒也不是問題,主要是別比平臺效果土。我用著win7,一個程式非讓我感覺回到xp時代,心裡特別添堵。

就這樣,一幫人商量著,又琢磨出個新思路:做適配。平臺有這個控制元件,就直接用,保證效率;沒有,再造輪子,保證可用。就這樣,swt問世。eclipse的gui就是基於此。
swt是贊,不過這屬於改良,兩個根本問題仍在:
1. 跟作業系統api打交道不是Java的長項,效率仍然不能與c++等相提並論。
2. 到底要不要跨平臺。如果要跨平臺,swt接瀏覽器控制元件、接ActiveX控制元件的功能就成了形同虛設;而要是不想跨平臺,又何必使用Java呢,.Net在一旁已經恭候多時了。

(補充:原生控制元件在各平臺下還是會有些差異,感謝@馮東指點)
@馮東:另一方面,即使每個平臺都支援的 control 也多多少少有些差異。比如同樣是文字框,Windows 和 Mac (Cocoa) 對待 non-English 輸入法選詞的語義就不同。再比如對 focus-lost 的處理二者也不同。所以 SWT 其實目前很難做到 Swing 那樣的跨平臺。跨平臺麼,終究還是隻能做到最大公約數,比如 x86 支援 4 級,Unix 只用兩級。可那是大家都同意不用的。在 UI 級別可沒有人能同意不用作業系統的某個功能。

除了技術本身,還有一個產業的問題,圍繞著GUI控制元件也存在一個生態環境,沒有豐富的領域、行業控制元件的支援,技術本身的戰鬥力也會大打折扣。而Java這方面的生態較為薄弱。

綜上,如果一個GUI程式使用Java,通常都是有這些特徵:
確實是想跨平臺
對介面並沒有太多效果的要求,介面效率也不是瓶頸
相比於其他GUI工具,開發人員對Java更為熟悉

比如,一些工具的管理介面,很符合

相關推薦

為什麼很多Java 適合編寫桌面應用

Java的桌面程式並不少,其中最為知名的莫過於Eclipse。在Linux和Mac下,Java程式的比例遠高於Windows下。 不過,“Java不適合寫桌面應用”的說法有一定道理,論調的主要背景是供Windows下使用的企業桌面應用的開發。由於一些歷史和定位的原因,對於這種GUI程式的需求,Java的優勢

這個季節吃茄子能治療7種疾病,很多知道!

otto nor 也有 5.6 cal span .cn http enter 這個季節吃茄子能治療7種疾病,很多人都不知道! 2016-04-26 都市報道擴大版 茄子的功效有什麽?茄子含有維生素E,有防止出血和抗衰老功能,常吃茄子,可使血液中膽固醇水

阿里巴巴首席架構師被採訪:這幾類適合當一名程式設計師!

很多人都覺得程式設計入門特別難,特別在剛開始的時候,敢問切入一個新的行業不付出點努力,不堅持下不深刻的挖掘下自己的潛力,都會覺得難得不行。程式設計學習的成本相對比較低廉,基本上一本書,一臺電腦就可以開始自己的自學之路,每天都有很多信心滿滿的上路學程式設計的,每天都有垂頭喪氣放棄繼續學習的,程式設計基

為什麼很多喜歡做程式設計師?

要想成長為一名優秀的程式設計師,其過程是艱鉅的,其道路是漫長的。 不經過悉心栽培,花兒開不出鮮豔的花朵;不經過時間的歷練,幼苗長不成參天大樹。在軟體行業更是如此。 程式設計師必須具備的性格特點 最基本的要求是能自主地程式設計。只有在經過多年的學習實踐之後,我們才能超越寫

很多知道的監聽微信、支付寶等移動app及瀏覽器的返回、後退、上一頁按鈕的事件方法

在實際的應用中,我們常常需要實現在移動app和瀏覽器中點選返回、後退、上一頁等按鈕實現自己的關閉頁面、調整到指定頁面或執行一些其它操作的 需求,那在程式碼中怎樣監聽當點選微信、支付寶、百度糯米、百度錢包等app的返回按鈕或者瀏覽器的上一頁或後退按鈕的事件呢。 我相信很多朋

Chrome 中的這個彩蛋,很多知道

當 Chrome 無法連線到網際網路時, 或者上著網突然掉線,重新整理頁面時報錯, 此時錯誤提示上方都會有一隻小短手霸王龍。嗯,表面上看起來也沒什麼特別之處,因為小短手在早期 Chrome 中有了。但一按空格鍵(或方向鍵 ↑ ),你就打開了一扇神奇之門! 往下看

C語言中的型別提升——基礎概念,但還有很多

每天都會看CU的部落格,尤其是CU首頁上面的部落格。個人感覺有很多同學並不關注基礎知識, 在遇到問題時,經常會捨本求末。遇到問題,總是找不到根本原因,得出了一些結論。但這些結論並不是真正的原因,整個兒過程,也把真正的原因給掩蓋了。 今天主要說一下C語言的型別提升的事

很多到 idea persistence視窗分享給大家

原文地址:https://blog.csdn.net/u010267491/article/details/52815652很多人找不到 idea persistence的視窗,無法生成實體類。按照這個點選一下,左邊或者右邊就會出現 【persistence】視窗了!配置資料

為什麼說學人工智慧一定要學Python?很多知道Python的強大

有很多人在問小編,為什麼人工智慧學習要用Python?執行速度慢不好之類的,今天就讓小編談談自己

我發現很多其實會用瀏覽器,你會嗎?

不一定 .so 資料 for nic www ima .com 效率 大多數人的生活和工作離不開電腦,而用電腦基本上是離不開瀏覽器的。 1、你知道的別人不一定知道,反之亦然 用瀏覽器看新聞、查資料很簡單,但是很多人都不知道瀏覽器的另一個強大的功能。也就是今天我想給大家介

Linq下有一個非常實用的SelectMany方法,很多會用

在平時開發中經常會看到有些朋友或者同事在寫程式碼時會充斥著各種for,foreach,這種程式程式碼太多的話閱讀性特別差,而且還顯得特別累贅,其實在FCL中有很多幫助我們提高閱讀感的方法,而現實中很多人不會用或者說不知道,這篇我就跟大家聊一聊。 一:SelectMany 這個方法絕對是提高開發速度的一大利器,

震驚!很多知道 CSS Grid 框架早就有了!

![](https://img2020.cnblogs.com/blog/999445/202011/999445-20201108224642309-874784610.jpg) ## 前言 寫作本文起源於知乎的一個問題:【[CSS Grid 佈局那麼好,為什麼至今沒有人開發出基於 Grid 佈局的前

5種適合JAVA程序員的,要不改完的Bug!

javajava程序員確實收入高、生活滋潤,有不少的人想轉行做程序員。但,畢竟要當上一名程序員,也不是一件輕松的事。有些小夥伴就是天生沒有自帶程序員的一些“屬性”。那麽,哪幾種人可能不適合做程序員呢?下面就來總結一下:1、對編程沒有興趣其實,說實話,最後一點是最重要的。因為你觀察身邊大部分的程序員,你會發現,

優化安卓應用內存的神奇方法以及背後的原理,一般告訴他

hvr 通知 lib easy rgb ger eset canvas 統計 安卓應用一般都害怕自己被殺。內存占用高是被殺的重要原因之中的一個。所以大家都想盡各種招數應對,但效果都一般。 但有一招: WindowManagerGlobal.getInstance(

a標簽一個有用卻很多知道的屬性——rel="nofollow"

ike aik 多人 asp 爬蟲 IV 搜索 nbsp 抓取      最近想了解學些一下SEO,然後看了一些基礎的視頻,視頻裏提到了a標簽的rel="nofollow"屬性。說來慚愧,第一次看到這個屬性,都不知道這個屬性是幹嘛的   nofollow是什麽?    

利用電影直播賺錢的方法(幾乎零成本、很多知道)

千萬 喜歡 狀態 類型 技術分享 比較 怎麽 人的 提示 每天都有人為了找好項目發愁,什麽是大家理解的好項目?上來什麽都不做就賺錢嗎,邊玩邊賺錢嗎?互聯網確實有太多賺錢的項目,但是都是需要前期的積累和沈澱,你熬過去了嗎?很多人看著別人後面躺賺的瀟灑,覺得好後悔,可以當初自己

很多知道做百度知道百分百成功的方法

估計 納秒 金融行業 shadow 破解 size 全部 http src 做百度知道百分百成功的方法 我們做網絡營銷和網站推廣的朋友估計很多人都研究過各大問答平臺,但是隨著百度的不斷更新真的這麽好做嗎?答案是否定的,現在不想以前了,以前百度機制不嚴,做自問自答基本不會被刪

html檔案直接可以瀏覽器開啟,為什麼很多選擇本地伺服器localhost開啟?有什麼一樣嗎?

最直接的區別,很容易注意到,一個是file協議,另一個是http協議。 --file協議更多的是將該請求視為一個本地資源訪問請求,和你使用資源管理器開啟是一樣的,是純粹的請求本地檔案。 --http請求方式則是通過假架設一個web伺服器,解析http協議的請求然後向瀏覽器返回資源資訊。我

程式設計師爆料:阿里很多離職只為在小公司當管理,只說話做事

如今國內,BAT可謂勢頭正盛!但是就綜合各項而言,阿里還是要強上一籌。阿里自從上個世紀末誕生以來,陸續推出了很多的應用和APP,其中要以支付寶和淘寶等出名了,因此也沒有人懷疑阿里的實力。 但是近日,卻有程式設計師網友稱: 據這位阿里的內部程式設計師爆料,在阿里只會Curd的那種程式

為什麼經常說Node.js適合大型應用

首先要明確什麼是大型應用,其實這是仁者見仁、智者見智的問題,並且它是一個哲學問題,不是一個技術問題。假如有人問你,一個可以進行線上銷售的網站,比如優衣庫,大不大?你可能會說大,因為這與你平常所見的部落格、企業官網等邏輯相比較確實複雜很多。或者說小,那麼說明你開發過比它還複雜的系統。那麼相比較淘寶