0

GUI 用のスイング フレームワークを使用するスタンドアロンの Java アプリケーションを実装しました。GUI の一部として、ボタンがクリックされた後に表示される JTextArea があり、ジョブがバックグラウンドで処理された後に jtextarea にテキストが追加されます。 jtextareaでアプリをフリーズさせたくないので、SwingWorkerライブラリを使用していますが、完全に機能します。したがって、ジョブコードはオーバーライドされたdoInBackground内にあります。

私が直面している問題は、この GUI アプリケーションを Eclipse プラグインの一部として起動するときです。swing アプリで jar を作成し、Eclipse ワークベンチに拡張機能を追加しました。最初はアプリが適切に起動しましたが、アプリケーション フローは、swingworker が呼び出されるポイントに進みます。この特定の jtextarea はフリーズし、何も起こりませんでした。Swingworker の doInBackground() 関数内のコードが呼び出されていないようです。以下のように、Eclipse pugin コード内でアプリを起動しています。

SwingUtilities.invokeLater(new Runnable() {public void run() {
              new MainFrame.setVisible(true);
          }
      });

MAinFrame は、Java プログラムの JFrame クラスです。なぜこれが起こっているのか知っていますか?

4

2 に答える 2

1

同じプロセスで SWT と AWT/Swing UI を混在させるのは簡単ではありません。異なるイベント ループが必要です。Awt/Swing イベント ループが Eclipse プロセスで実行されていないため、コードがフリーズしています。SWT で UI を書き直すか、SWT-AWT ブリッジを調べることができます。ブリッジは「動作」しますが、多くの不具合があります。実際には、膨大な量の AWT/Swing があり、UI を SWT に移植する間に一時的な解決策が必要な状況にのみ適しています。

于 2011-03-29T14:29:05.970 に答える
0

Runtime.exec() で外部プログラムを呼び出してみましたか?

お気づきかもしれませんが、Eclipse SWT/Jface と Swing を混在させるのは難しいトピックです。

于 2011-03-29T09:14:13.610 に答える