天天看點

Java Swing 是否适合做大型項目及桌面應用?

作者:sailing8036

連結:https://www.zhihu.com/question/19608871/answer/12378179

來源:知乎

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

作為一個和Swing深度打交道10年的我給點個人看法:

Swing的優點:

1:性能不錯,因為其底子Java2D還不錯,不是極其特别海量級應用基本都可勝任

2:bug并不是想象那麼多,這些年sun已修複很多,即使有也很容易到找workaround

3:元件市場談不上豐富,但該有的也都有了jidesoft,infonode,jfreechart,swinglabs等可以參考

4:大型的應用問題不在于Swing,選用任何其他GUI也都得考慮分業務,分子產品加載等問題,這方面NetBeansRCP和EclipseRCP都可以參考,我建議先不考慮引入RCP增加學習指數(包括引入更多風險),如果實在必要需用NetBeansRCP比較舒服,Eclipse的RCP需要考慮Swing和SWT的整合有不少問題恭候着你

Swing的缺點:

1:其MVC的設計架構還是很穩健,使的Swing這麼十幾年屹立不倒,不過還是顯示出了老态和缺陷,這個話題很大可以寫好幾篇文章,簡單說Swing的設計不如Flex的MVP,不如Silverlight/WPF的MVVM易于讓程式員編寫,測試包括IDE的提供

2:Swing的lookandfeel是很好的思想,但沒有設計好,這麼多年雖然也有不好官方,開源和商業的LAF出現,但除了官方常用的那幾個雖然醜但沒有太多bug還算能用,其他我基本不用除非應用不複雜

3:Swing有很多layout初衷很好,但同樣問題是衆多實作者中沒有幾款簡單易用的,我自己寫了個布局這些年我自己一直用自己的這個布局,公司很多其他人也是熟悉哪款可能一輩子就用它了,因為沒時間去折騰研究其他款

4:元件的确不是相當豐富完善,一個DateChooser到現在都沒個官方的,JDK7隻是maybe,确定的是在JDK8提供,當然這不嚴重前面提到你可以很容易找到其他開源或商業的元件解決,不過也能反映點問題

最後談點個人經驗,我們公司是重度Swing使用者,都是手工寫界面代碼,如果大型項目自然值得好好投入去積累元件和封裝,有了好的封裝的元件基本手工代碼還是非常簡單易讀友善維護,另外就像第一點提到Java2D真的不錯,如果你覺得那些地方實在太難用了,實在太差醜了,或者實在性能太差了,你完全可以随便擴充個component自己去paint完全用Java2D重新個你滿意的元件,有點經驗後你會發現寫個元件不是那麼難,而且還挺有趣。

補充:

感謝不少朋友的頂,收到不少私信詢問Swing的技術問題,但我已經五年多沒再接觸Swing了,對Swing的技術細節問題恐怕很難再一一給答複,對于大型項目的問題,我覺得如果不考慮遺留老系統的維護問題,如今不管大項目小項目HTML5已經足夠好了無需猶豫了。