web-dev-qa-db-ja.com

JavaクロスプラットフォームのGUIアプリケーションを開発するのに最適な言語ですか?

「最良」の場合、コードはプラットフォーム固有の調整を必要としないか、ほとんど必要としないことを意図しています。

30
Frederick

クロスプラットフォームのGUI開発にはJavaを強くお勧めします。特に、 Netbeans IDE に付属のGUIビルダーをお勧めします。非常にシンプルで非常に強力です。あなたポイントアンドクリックアンドドラッグアンドドロップでGUIを作成し、さまざまなボタンやその他のコンポーネントが実行するアクションを簡単にカスタマイズできます。

私は言語としてPythonを好みますが、GUI開発用の無料ツールはどれもこれに近いものはなく、私が使用した他の言語にも同じことが当てはまるようです。( [〜#〜] qt [〜#〜] にはCやPythonなどのさまざまな言語用の素晴らしいGUI開発者がいますが、オープンソースプロジェクトで使用する場合にのみ無料です。)

編集:QTは最近LGPLとして再ライセンスされたため、商用アプリケーションで自由に使用できます。 Pythonこの(PyQT)のバインディングは再ライセンスされていませんが、 PySide という別のプロジェクトが作成されてPython = QTバインディング。

21
Eli Courtwright

私は個人的に、Java GUIが根付いているネイティブGUIをエミュレートするという概念全体を軽蔑しています。どこに行っても家にいる代わりに、どこにいても観光客になり、通訳が必要になることがよくあります。 Eclipse GWTは、ローカルリソースをはるかに有効に活用する優れたツールキットですが、それでも、人々はJavaコードを書くのが好きで、Java =アプリケーション、考えてみてください:デスクトップで好きなJavaアプリケーション?

Tkは同じように醜く、実行することを選択したオペレーティングシステムで制限されています。私の意見では、Qtについても同じことが言えます。

モノは、「なぜLinuxがダメなのか」という質問に答える方法であるため、その古いポストbi Miguel de Icazaを覚えているなら、良い試みが必要です。 Monoには成熟したウィジェットとApiのセットが付属しており、移植性を提供するためにできることを制限しようとはしていません。

Silverlightはポータブルに近く、優れたインターフェイス定義言語を備えていますが、システムにアクセスできないため、同じマシン上でもアプリケーションをサーバーとUIに分割して克服する必要があります。

Adobe AIRは犬であり、ローカルシステムへのアクセスは簡単ではありません。

選択できる場合は、GUIを完全に避けて、Webサーバー、さらにはローカルWebサーバー、およびJson、JQueryなどすべてを使用しようとする傾向があります。ネイティブウィジェットよりも多くの選択肢があり、生産性が高いことがわかりました。これは、実際の言語サーバー側を使用することの長所と、GUIでのJavaScriptの素晴らしく無秩序な優しさを兼ね備えています。

5
mico

はい:EclipseRCPを使用します。クロスプラットフォームだけでなく、たとえばそれを備えた多言語アプリケーション。 SWTは、複数のプラットフォームとウィンドウシステムにネイティブのルックアンドフィールを提供します。

4
thSoft

ですから、私が理解しているように、現在、真にクロスプラットフォームの高級言語とGUIツールキットはありません。

  1. Javaはクロスプラットフォームであり、SWTとSwingの両方のGUIは、ピクセル精度で微調整し、サポートされているプラ​​ットフォームの外観に変更を加えることを実際に試みたときに、見栄えがよくなります。現在、優れたGUIデザイナーが何人かいますが、15年前のOpenStepほど素晴らしいものはありません。

  2. QTは、動的にリンクするだけである限り、LGPLになります。しかし、QTには独自の問題があり、C++のスーパーセットです。一般的なC++コンパイラではなく、QTハッキングされたコンパイラに対してコンパイルする必要があります。

  3. wxWidgetsを試しませんでしたが、見た目からは機能しますが、高レベルのツールキットではありません。

  4. C#とオープンソースの.NETで記述し、Windows以外のプラットフォームでMonoを介して実行するオプションがあるようです...試していませんが、Microsoftを他のプラットフォームに移植しているだけのようです。

  5. GNUstepがありますが、今のところ、オープンソースのオタクファンによってのみ開発されているように、私を探しています。 Mac OS Xの外でOpenStepスタックを見るのは本当に興味深いことですが、今のところ、これは実行可能ではないと私には思えます。

Javaでさえ、自己完結型ですが、現在、優れたGUIデザイナー機能を提供していません。 SWTでコーディングする方法を学び始めたときにGUIデザイナーツールを一度使用しましたが、今では手作業でコーディングしていることに気付きました。これはそれほど悪くはありませんが、実際には必要ないはずです。しかし、それは数年前のことでした。もう一度やり直さなければなりません。

もちろん、クロスプラットフォームのアプリケーションコアとサービスコードを1つの言語(Java、または速度が必要な場合はC/C++)で作成し、サーバーやUNIXツールなどを作成して、作成したGUIから接続することもできます。独自のツールを使用して、必要な各プラットフォーム。その結果、GUIはプラットフォームネイティブであり、プラットフォームの機能を利用しており、必要なプラットフォームごとに作成するのはかなり簡単です。 (MacのCocoaとWindowsの.Netは、ネイティブのプラットフォームに豊富な機能を提供します)。

このような理想的なソリューションの堅牢性と成熟度を検討する必要があります。そのようなツールの将来の実装は、サポートされているすべてのプラットフォームに対して単なる最小公分母以上のものを提供するが、クロスプラットフォームツールを活用して含めるように、それは優れた商業的およびコミュニティの支持を持ち、現在かなり進化している必要があります適切に設計された概念と関連するプラットフォームに固有の豊富な機能を採用し、それらをクロスプラットフォームに配布します。

クロスプラットフォーム開発が真に実行可能であり、多数採用できるのはそれだけです。

提案?

3
Thomas

誰かが"プラットフォームの独立性"を正しく定義している限り、Javaが最適です。

C#が最適であると主張する人もいますが、それらの人々は「プラットフォームの独立性」という用語を誤解しているようです;)

注:C#がLinux/Unixに移植されるのは、MicrosoftとNovelが条約を守っている間だけです。コミュニティ自体は、.NETのような巨大なプラットフォームを維持することはできません。

Javaは確かに素晴らしいですが、私は最近Python and Qt via PyQt4 )でうまくやっています。 Swing または [〜#〜] swt [〜#〜] よりも速く実行されました。

これまでのところ、プラットフォーム固有の調整は必要なく、Qt4ウィジェットはさまざまなプラットフォームで見栄えがします。 Qt GUIビルダーは非常に優れており、Pythonを使用すると、他のクロスプラットフォームフレームワーク(特に [〜#〜] vtk [〜#〜] )と簡単に統合できます。 =、 scipy-cluster 、およびいくつかの [〜#〜] swig [〜#〜] -パフォーマンスツールから出力されたファイルとインターフェイスするためのラップされたオブジェクト)。

Qtは、オープンソースプロジェクトで使用しない限り無料ではないことに注意してください。

2
Todd Gamblin

また、Monoは、プラットフォームの独立性と優れたIDEツールです。Javaのパフォーマンスはデスクトップに悪影響を及ぼします。確認してください http://www.codeproject.com/KB /dotnet/RuntimePerformance.aspx

1
dmihailescu

ネイティブバイナリの場合、wxWidgetsは便利なソリューションです。

これは、ユーザーエクスペリエンスの面でJavaよりも優れていると言えます。プレゼンテーション層をJavaのすべてのプラットフォームでほぼ同じように見せることはできますが、すべてJavaのように見えます。一方、wxWidgetsを使用すると、ユーザーはプラットフォーム固有のビルドのように感じられます(実際、そうです)が、同じコードを使用して複数のプラットフォーム(少なくとも主要なプラットフォーム)用にコンパイルできます。

1
rodrigogq

最近では、クロスプラットフォームのGUIアプリケーションを効率的に作成できる言語がたくさんあります。 Java、Python、Tcl/tk、C#.。

たとえば、アプリケーションの要件をもう少し定義する必要があると思います。

  • UIはWebベースですか、それともデスクトップベースですか?
  • アプリケーションは大きくなりますか、それとも小さくなりますか?
  • ある種の「拡張」機能(プラグインなど)を備えていますか?
  • ネットワーク上で機能し、分散/負荷分散される可能性がありますか?

リストは永遠に続き、アプリケーションの定義ポイントを見つけ出し、全体に基づいて言語の調査を開始できます。

1
seanhodges

どんなプラットフォームをターゲットにするかによると思います。 JavaはVMを備えたほとんどのプラットフォームを備えています。ただし、WindowsとLinuxのみを使用する場合は、C#を使用できます(Linuxではmonoを使用)。

0
Howler