java桌面,java桌面應用開發

本文目錄一覽:

Java適合開發桌面應用程序嗎?

從目前大的形勢看java對桌面應用開發缺少力度,特別是在windows平台下,一方面是執行效率,另一方面是桌面應用的部署不是很完備。但是如果考慮到桌面應用的跨平台特性,java還是很有優勢的,比如向linux平台遷移,甚至有時候java是唯一的選擇。所以總體考量的話,考慮跨平台的桌面應用開發的話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的控制台以窗體的形式顯示在桌面上?

1、首先打開電腦,轉到JAVA的控制台頁面。

2、然後關閉頁面,會自動彈出,是否以窗體形式顯示在桌面。

3、點擊下方顯示,即可出現在桌面。

北大青鳥設計培訓:Java用於開發桌面應用的優劣?

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

沒錯,杭州IT培訓認為Java在去年做了很多顯著而有效的工作。

然而不得不說的是,除此之外其他的仍是一塌糊塗。

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

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

使用Java構建桌面應用更多的是困難和麻煩,比如即便想要在Java應用內創建一個高效的優良的web瀏覽器都是一件難事。

而且沒有用Java編寫的圖片處理應用,沒有一個純粹的Javaweb瀏覽器,沒有數字音頻應用,沒有3D建模器,沒有矢量圖形編輯器,沒有先進的光柵編輯器。

Java今日在桌面端所到達的高度只能滿足那些伺服器開發者,因為他們只需要在遠程服務時使用電腦桌面上的簡單界面。

過去我們一直說這是因為Java太慢,無法在一個慢的平台上開發出如此複雜的應用。

但我們這樣說是錯的。

原因有兩點:一,Java從來就沒有慢過,即便有些部分曾經慢過,但沒有人懷疑當它需要被用到伺服器端時它會迅速地得到提升,比如JITs,GCs等。

這一點也正是Java語言卓越的地方。

二,由於Java平台的天然特性,Java應用總是第一個利用市場上新硬體和新操作系統的應用。

一旦JVM被配置到了一個新系統中,幾乎不需要任何編輯和調試,Java應用就可以在上面全速運行。

比如你在32位的操作系統上開發了一個應用,它就可以全速運行在Windows7或者Solaris的64位JVM上。

所以所謂的Java太慢根本不能成為Java在桌面端碌碌無為的借口。

java安裝完成後怎麼把圖標放到桌面

安裝完成後怎麼把圖標放到桌面, 在java上右鍵 選擇發送到–》桌面快捷方式即可 。

java開發桌面idea能拖拽嗎

java開發桌面idea不能拖拽。學習java推薦選擇千鋒教育。千鋒教育擁有多年IT培訓服務經驗,採用全程面授高品質、高體驗培養模式,

手滑用滑鼠把某個文件或者文件夾拖拽到另一個目錄,然後idea馬上提示你是否確認操作,每次都要小心翼翼的選擇取消,如果確定了,那就麻煩了。在編輯器內,也會遇到選擇了一段代碼準備複製的時候,經常也會把代碼拖動到其他位置,導致錯亂,還需要ctrl+z取消操作,這個也是可以禁用的。

想要了解更多java開發的相關信息,推薦諮詢千鋒教育。千鋒企合作部整合大量企業客戶資源,緊抓當下企業需求,將技術和項目完美結合千鋒課程體系,力求培養更多優質人才服務企業,不斷提升學員競爭力,鏈接企業用人標準的培訓課程及實戰項目,讓企業招聘用人的技術要求與千鋒學員的技術充分對接。近年來不斷引進阿里釘釘小程序技術、紅帽認證、騰訊雲、亞馬遜等,通過與企業的深度融合實現千鋒教研和就業服務的迭代升級,專業性值得信賴。

原創文章,作者:HZUT,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131485.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HZUT的頭像HZUT
上一篇 2024-10-03 23:45
下一篇 2024-10-03 23:45

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論