Javaデスクトップアプリケーション:SWTとSwingの比較[終了]


158

私はWeb開発者で、最初の実際のデスクトップアプリケーションの構築を考えています。アイデアは、APIが利用できないWebアプリケーションで非常に反復的なタスクを自動化するツールを構築することです。

Javaを使いたいと思っています。私は以前にウェブ関連で使用し、構文をよく理解しており、アプリケーションをできるだけ簡単にクロスプラットフォームにしたいと考えています。

SWTとSwingのどちらを使用すればよいかわからない場合があります。私の主な読者はWindowsを使用しているので、できる限りネイティブで見たいと思っています。LinuxとMacは動作するはずですが、ここでは外観はそれほど重要ではありません。

それでは、各UIフレームワーク、Swing、またはSWTに対する賛成論と反対論は何ですか?

ありがとう。

PS:私はEclipseを使用してWindowsで開発しています。しかし、Netbeansで遊ぶことを考えていました。


厳しい質問。:-)私はスイングで行きます。しかし、その決定のためのPROまたはCONはありません。
Pablo Santa Cruz

重複するQ. SOで既に尋ねられたSwing対SWT Qを探してください。FWIW、私はSwingをそのように学んだからといって使用しています。ネイティブのルックアンドフィールライブラリがあります(jgoodiesのルックを参照)
Jason S

「Webアプリケーションで非常に反復的なタスクを自動化するツールを構築する」-これに関する情報はありますか?既存のツールがあるかもしれません-そしてこれを自動化するデスクトップアプリの必要性を疑問視します-今のところそれはあなたのケースでうまくいくかもしれません-しかし、あなたがホストされたソリューションに移動したらどうでしょうか?
2010

デスクトップアプリのGUIフレームワークを学ぶ必要はありません。html cssとjs(私はそうだと思います)を使用できる場合は、Electronを使用して、Web言語でネイティブに見えるアプリを構築できます。
Pranav A.

Electronは、私がこの質問をしてから数年後に発明されました;)しかし、もちろん今日はあなたが正しいです。
janpio 2018

回答:


152

プロのスイング:

  • Javaライブラリの一部、追加のネイティブライブラリは不要
  • すべてのプラットフォームで同じように機能します
  • NetbeansとEclipseの統合GUIエディター
  • Sun / Oracleによる優れたオンラインチュートリアル
  • 公式のJava拡張機能(Java OpenGLなど)でサポート

短所スイング:

  • ネイティブのルックアンドフィールは、実際のネイティブシステムとは異なる動作をする場合があります。
  • 重いコンポーネント(ネイティブ/ awt)は、swingコンポーネントを非表示にします。重いコンポーネントの使用はかなりまれであるため、ほとんどの場合問題ではありません

長所SWT:

  • 可能な場合はネイティブ要素を使用するため、常にネイティブの動作
  • Eclipse、GUIエディターVEPでサポート(VEPはSwingとAWTもサポート)
  • オンラインで多数の例
  • 統合されたawt / swtブリッジがあり、awtおよびswingコンポーネントの使用を可能にします

短所SWT:

  • サポートされるシステムごとにネイティブライブラリが必要
  • ネイティブリソースが使用されているため(ヒントオプション)、すべてのシステムですべての動作をサポートするとは限りません
  • ネイティブリソースの管理。ネイティブコンポーネントは多くの場合、親とともに破棄されます。フォントなどの他のリソースは、手動で解放するか、自動解放のためにコンポーネントの破棄リスナーとして登録する必要があります。

33
Swingは「1度記述すればどこでも実行できる」に近くなります。SWTは、「1回書き込み、どこでも調整/テスト」のようなものになります。しかし、これと同じ議論が他の言語でも起こりました。
マーク

12
現実的には、Swingの「ネイティブ」なルックアンドフィールは、Gnomeデスクトップとはかなり異なる動作をします-何らかの理由で、テーマは非常にうまく機能しますが、メニューはひどく見え、ほとんど使用できません。
Hut8

9
Eclipse 3.7以降、VEPはWindowBuilder(SwingとSWTの両方をサポートする)に置き換えられました。
Alexey Romanov

6
SWTの利点は、ネイティブコンポーネントのため、メモリ消費が少ないことです。これはメモリが限られているマシンでは望ましいはずであり、swingとswtのメモリの差は、大規模なGUIデザインでは大きくなる可能性があります。
jantobola 2013年

1
@JanTobolaそれは間違いです。ネイティブコンポーネントは、Javaヒープだけでなく、ネイティブヒープに割り当てられたメモリを使用します。私は、Netbeansプラットフォーム、Eclipse RCP、SWT、Swingを使用して大きなGUIで作業しました。Javaの非常に初期のバージョンのSwingには、メモリフットプリントに関する深刻な懸念がありました(サードパーティのライブラリであり、1.1から1.2に移行した後も? )が、真実ではなくなり、SWTで多くのリソースを解放するのは開発者次第です。SWTでメモリリークが発生する可能性ははるかに高くなりますが、参照されていないコンポーネントはSwingで「破棄」されることになります。
gouessej 2018

63

考慮すべき重要な点は、一部のユーザーと一部のリセラー(Dell)が64ビットWindowsに64ビットVMをインストールし、32ビットVMと64ビットVMで同じSWTライブラリを使用できないことです。

つまり、ユーザーが32ビットまたは64ビットのJava VMを使用しているかどうかに応じて、さまざまなパッケージを配布およびテストする必要があります。参照してください。この問題は、たとえば、Azureusのでは、しかし、あなたはまた、今日のよう64ビットVM上で実行されないフロントダウンロードページの上に構築Eclipseの、とそれを持っています。


2
興味深い点。ユーザーとして、私はまだこれがそんなに大事な理由に驚いています。しかし、まあ、それは私がこれを考慮しなければならないのでです。ありがとう。
janpio

btw:javaws(webstart)は64のIMHOでは利用できません
Karussell

1
@Karussell:2011年3月4日の時点で、SunのWindows用64ビットJVMはJNLPをサポートしています。しばらくはそうだったと思いますが、どれくらいかはわかりません。
錬金術師

23

プロスイング:

  • swing IMHOの最大の利点は、ライブラリをアプリケーションと一緒に出荷する必要がないことです(これにより、数十MBが回避されます(!))。
  • ネイティブのルックアンドフィールは、初期よりもスイングに優れています。
  • パフォーマンスはswtに匹敵します(スイングは遅くありません!)
  • NetBeansは、快適なコンポーネントビルダーとしてMatisseを提供します。
  • JavaFX内のSwingコンポーネントの統合はより簡単です。

しかし、最終的には、「純粋な」swingまたはswtを使用することはお勧めしません;-) swing / swt outにはいくつかのアプリケーションフレームワークがあります。こちらをご覧ください。最大のプレーヤーはnetbean(swing)とeclipse(swt)です。もう1つの優れたフレームワークはグリフォンであり、「コンポーネントのセット」はピボット(スイング)です。Griffonは、swingだけなく多くのライブラリーを統合しているため、非常に興味深いものです。また、ピボット、SWTなど


1
はい、NetBeansにはGUIビルダーとしてMatisseがありますが、コードは非常に冗長で、読みにくく、ソースコードで編集することはほとんど不可能です。GUIビルダーが本当に必要な場合は、Eclipseを使用してくださいWindowBuilder
Pranav A.

13

Swingを使用する理由はいくつかあります。

  • それはずっと以前からあり、より多くの開発努力が適用されてきました。したがって、機能の完成度が高くなり、(おそらく)バグが少なくなります。

  • パフォーマンスの高いアプリケーションの作成に関するドキュメントやその他のガイダンスはたくさんあります。

  • Swingへの変更はすべてのプラットフォームに同時に伝播するようですが、SWTへの変更は最初にWindows、次にLinuxに表示されるようです。

非常に機能豊富なアプリケーションを構築したい場合は、NetBeans RCP(Rich Client Platform)を調べてみてください。学習曲線はありますが、少し練習するだけで、優れたアプリケーションをすばやくまとめることができます。有効な判断を下すのに十分なEclipseプラットフォームの経験がありません。

RCP全体を使用したくない場合、NetBeansには、独立して引き出して使用できる多くの便利なコンポーネントもあります。

もう1つのアドバイスは、さまざまなレイアウトマネージャーを調べてください。私が学んでいたとき、彼らは私を長い間つまずきました。最高のもののいくつかは、標準ライブラリにさえありません。MigLayout(SwingとSWTの両方)となJGoodiesのフォームツールは、私の意見では最高の2つです。



8

要件としては、SWTを使用する方が収益のように思えます。SWTのようにネイティブプラットフォームに緊密に統合されていないため、開始するのが少し簡単だからです。

Swingは通常安全な賭けです。


6

興味深い質問です。(SwingやAWTとは異なり)SWTを自慢するにはあまりにも詳しくありませんが、SWT / Swing / AWTで行われた比較を以下に示します。

http://www.developer.com/java/other/article.php/10936_2179061_2/Swing-and-SWT-A-Tale-of-Two-Java-GUI-Libraries.htm

そして、これはあなたが基本的にSWTの何でもチュートリアルを得ることができるサイトです(http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm

あなたが正しい決定をすることを願っています(コーディングに正しい決定がある場合)... :-)


4
しかし、記事は2003年からのものであることに注意してください...
Alexey Romanov

4

ほんの一握り以上の機能を備えた完全に機能するアプリケーションを構築することを計画している場合は、すぐにEclipse RCPをフレームワークとして使用することをお勧めします。

アプリケーションが大きくなりすぎない場合、または要件があまりにもユニークすぎて通常のビジネスフレームワークで処理できない場合は、Swingで安全にジャンプできます。

結局のところ、両方のテクノロジーを試して、自分にぴったりのスーツを見つけることをお勧めします。Netbeans対Eclipse対IntelliJのように、ここには絶対的な正解はありません。両方のフレームワークには独自の欠点があります。

プロスイング:

  • より多くの専門家
  • よりJavaに似ている(ほとんどパブリックフィールドがないため、リソースを破棄する必要はありません)

プロSWT:

  • より多くのOSネイティブ
  • もっと早く

10
「速い」という点は非常に論争の的だと思います。
Russ Hayward

SWTは使いづらく、Windowsの各バージョンでGUIをテストする必要があり、一部のバグはWindows Vistaでのみ再現可能でした。一部のメソッドは、単に実装されていないか、内部でAWTを呼び出します。つまり、AWTなしでコンパクトなJREを使用したり、SWTを壊したりせずにSwingを使用したりすることはできません。私は2009年にSWTを使い始めましたが、私の考えでは、それは速くはありません。慎重に設計されたベンチマークを提供することをお勧めします。
gouessej 2018

4

考慮すべき1つのこと:スクリーンリーダー

いくつかの理由により、一部のSwingコンポーネントは、スクリーンリーダー(およびWindows用のJava AccessBridge)を使用するとうまく機能しません。スクリーンリーダーによって動作が異なることを知っておいてください。私の経験では、SWTツリーは、スクリーンリーダーと組み合わせたSwingツリーよりもはるかに優れています。したがって、アプリケーションはSWTコンポーネントとSwingコンポーネントの両方を使用することになりました。

適切なSWTライブラリを配布してロードするために、次のリンクが役立つ場合があります。http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191


3

SWTは、世紀の変わり目頃のSwingの低迷に対応するために作成されました。パフォーマンスの違いはごくわずかになっている今、標準アプリケーションにはSwingの方が適していると思います。SWT / Eclipseには、多くのボイラープレートコードに役立つ優れたフレームワークがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.