Java Swing GUIフレームワークにはどのような欠点がありますか?[閉まっている]


11

一部のデスクトップアプリケーションにJava Swingを使用しました。しかし、他のGUIフレームワークをあまり使用していないので、それらを比較することはできません。

Swingで好きなことと嫌いなことは確かにありますが、それはほとんどすべての状況です。

Java Swing GUIフレームワークの最大の欠点は何ですか?


2
問題は興味深いものです。QT、GTK、SWT、Winforms、Cocoaなどと比較して、Swingの長所と短所は何だろうと私も思います。たぶん、あなたはを求めるためにタイトルを言い換える必要があるの比較ではなく、欠点(よく主張していない答えを持参する傾向がある)
barjak

回答:


3
  1. Javaをどこかにインストールする必要があります。もちろん、これはすべてのGUIフレームワークに当てはまりますが、Javaには2トンのゴリラの知覚があります。負荷は改善されましたが、Javaアプレットの初期の時代は多くの人々を失いました。1つのアプリを実行するためだけに必要な場合は、セキュリティパッチなどを使用して最新の状態に保つために多くのメンテナンスが必要です。誰もがYouTube用のFlashを持っている必要があり、.Netフレームワークは舞台裏でインストールされ、誰もがブラウザでJavaScriptを有効にしています。通常、Javaは追加の作業です。

  2. すべてが一回限りの書き込みでどこでも実行できますが、Mac OSXには、使用したい新しい機能が備わっていないか、1つのクライアントがmandrake linuxをJRE 1.4以降にアップグレードすることを拒否しています。

  3. 開発者は、スレッド化について考える必要があります。そして、マルチスレッド化は可能ですが、swingはすべてシングルスレッド化されているように振る舞うので、注意が必要です。ただし、プルするライブラリの半分にはある程度のマルチスレッドがあり、EDT invokeLaterについて知っていると想定すると、多くのレッスンが困難になります。

  4. Swingのエクスペリエンスは、他の種類のUI開発に簡単には移行しません。たとえば、.cssのテーブルを熟知している場合、Jtables、レンダラー、エディターなどによって完全に道に迷うことになります。

一般に、Swingの主な問題は、Swingが市場に出された方法に対応していなかったことです。これは多くのユースケースに完全に適したテクノロジーですが、最初の5〜6年はひどい実装とひどいアプレットでいっぱいでした。そして今、それは古い技術です-Web 3.0などに。

とはいえ、私はSwingが好きで、プロが一般に短所を上回ると思います。しかし、Webエクスペリエンスは非常に広く普及しているため、多くのユーザーは、最も合理化された驚くべきSwingアプリよりもWebアプリを簡単に利用できるようになります。そして素晴らしいSwingアプリは世の中にありますが、それらは主流ではないようです。


1
私はOPと同じ状況にあります。Swingを知っていて、それを他のGUIのタックリットと比較することに興味があります。私にとって、ポイント1、2、および4は質問には無関係です。では、ポイント3に対応したいと思います。マルチスレッドGUIツールキットの例をいくつか挙げていただけますか?ありがとう。
barjak

2
@barjak:マルチスレッドGUIは間違いです。私が知っているのは古いJava AWTだけです。しかし、最新のすべてのGUIフレームワークと同じようにシングルスレッドであるSwingを設計したとき、彼らは間違いから学びました。
ジョナス

@Jonasマルチスレッドについて開発者に考えさせることはよくある間違いですが、ある程度のマルチスレッドがなければ、アニメーションを実行したり、RMI呼び出しを行ったり、激しい計算(これはファットクライアントツールキットです)を行うことはできません。
スティーブジャクソン

3
@Steve:そうです。ただし、GUIスレッドでRMI呼び出しや集中的な計算を行うべきではありません。この種のことは、SwingやWPFのように、バックグラウンドスレッドで行う必要があります。
ジョナス

@barjak-Windowsフォーム、MFC、SWT、pyQT、Juce ...マルチスレッドではないものを考えるのがもっと難しいです。一般的に同じルールが適用されますが、作成したスレッド以外ではGUIコンポーネントを操作できません。
スティーブジャクソン

2

ジョナス、

Swingは、基盤となるアーキテクチャを一般化して、プラットフォームに中立的なユーザーエクスペリエンスを提供します。(OSが提供する)唯一のヘビーウェイトコンポーネントはJFrameコンテナーであり、残りはSwing Takeitによってほとんど処理されます。一方、AWTは、OSにすべてのUIコンポーネントを描画するように要求します。つまり、OS固有のネイティブUIコンポーネントを使用するよりも、多くの点で高速です。SWTは、ボタンやラベル(ほとんどのOSで利用可能)などのさまざまな標準コンポーネントの中間点を実現しようとします。これにより、OSがそれらを処理できるようになり、他の特殊コンポーネントの場合は、SWTが作成を処理します。

そうは言っても、私は欠点を概説することができます。

(1)ツールキットは、OSに要求するのではなく、コンポーネントを作成してレンダリングするため、OSが提供する組み込みコンポーネントの速度を利用できません。

(2)UIは、使用するルックアンドフィールに関係なく、ほとんどのOSプラットフォームでは異質に見えるため、特に煩わしいものではありません。

(3)レイアウトマネージャーの一部、つまりGridBadLayoutなどは、より単純化できます。GridBagLayoutをいくつかの特注のコードにラップして、より簡単に使用できるようにしたプロジェクトの数を失っています。

AWT、Swing、SWTでシンプルなアプリを作成し、開発アプローチと最終製品をすべて比較してから、他の開発者から寄せられたさまざまなコメントを確認して、どれが最適かを判断することをお勧めします。私は長年Swingで働いており、嫌いなSWTを使用していましたが、他のフレームワークと比較すると、Swingは必要以上に複雑であることを理解するようになりました。


4
SwingはGPUアクセラレーションであり、ネイティブフレームワークはそれほど頻繁ではないため、実際にはSwingの方が高速だと思います。これは、Windows上のWPFにはあるが、WinFormsにはない戦略でもあります(一部のバージョンのWindowsのみ)。「[醜い] ...使用するルックアンドフィールに関して」は、非常にカスタマイズ可能である場合、またはLaF独自のプラットフォームを使用できる場合に、どのようにして真実になるのでしょうか。私はレイアウトマネージャーが本当に悪いことに同意します。
ジョナス

Jonas、それは他のフレームワークと比較してトリッキーになるスイングの「カスタマイズ可能な」側面です。OSが提供する機能から抽象化しようとすると、OSが提供する多くの利点が失われます。Swingの最初のバージョンは悪夢であり、そもそもSWTの作成につながりました。後でSwingが大幅に高速化され、SwingUtilitiesのような、GUIのスレッドサポートが向上したクラスができました。
荒涼とした惑星

醜い言葉は間違っているかもしれません。エイリアンは、ルックアンドフィールがネイティブUIのルックアンドフィールとまったく同じではないので、より良い言葉かもしれません。覚えている限りでは、Java、モチーフ、メタル、その他いくつかを持っていますが、一般的にはとてもきれいです。
荒涼とした惑星

比較を行うときに次に注目するのは、UIの開発に関連する作業です。レイアウトマネージャーが本当に悪いとは言わないでください。レイアウトがない(モバイルデバイスでの作業で対処する必要がある)のよりはましですが、モデルを単純化するための努力はしていません。
荒涼とした惑星'14

私はあなたが言ったことに基づいて、Swingのより新しいバージョンを使用していると思いますが、それが最初に出たとき、人々はそれに対して強い嫌悪感を抱き、Swingベースのアプレットを提供しようとするとさらにそうしました。Javaで開発されたUIフレームワークには多くの歴史があり、それを調べれば興味深い読み物です。
荒涼とした惑星

-2

Swingは遅く(パフォーマンスが悪い)、(他の多くのものと比較して)使用するのが難しい/不格好であり、一部のプラットフォームでは非常に見栄えがよくありません。


5
多くのネイティブGUIに比べてGPUアクセラレーションが速いので、パフォーマンスに同意できないか、例がありますか?他のフレームワークと比べてどれほど難しくて不格好ですか?見た目は良くないが、ネイティブアプリのように見えるように構成したり、カスタムLaFを使用したりできることに同意します。
ジョナス

それは多かれ少なかれ常にGTKで非ネイティブに見えます。私が聞いたことは、ウィジェットの描画はJava 2Dに依存しているので遅いですが、それを証明するものは何もないということです。QtとGTKはどちらも不器用ではありませんが、味は異なります。
Anto

ああ、一部のプラットフォームではパフォーマンスが低下する可能性があります。私は、GPUアクセラレーションがあり非常に高速であるWindowsでのみ使用しました。
ジョナス

6
人々はまだ、何かがネイティブに見えないことに不満を抱いていますが、ブラウザーの物(stackexchangeを考えてください)をますます使用していますが、すべてのページが異なって見えますか?そしてスピード?ほとんどの場合、対話型のGUIプログラムがユーザーを待っています。
不明なユーザー

2
ほとんどの「流行の」プログラムは、もはやネイティブに見えません。スイングはその点で良くも悪くもなりません。50klocスイングアプリ(ファットクライアント)のパフォーマンスは問題ないようです。「ネイティブ」アプリケーションよりも、クラッシュしないポイントまでスイングするのがはるかに簡単です。
Tim Williscroft、2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.