0

JTabbedPane内にあるJPanel内にあるJEditPane内にhtmlページをロードするためにinvokeLater()を使用しています。

私のメソッドはすべて、html をロードするために正常に機能します。私が問題を抱えているのは、タブのタイトルを更新することです。

メソッド setTitle() および setTabTitle() は機能しますが、PageLoader が完了する前に実行されます。したがって、タブのタイトルには常に前の HTML ページのタイトルが表示されます。

メソッド setTitle() および setTabTitle() の実行を、後で呼び出し内のスレッドが完了するまで停止する方法はありますか?

ここに私が見ているコードの一部があります:

private void showPage(){
    // Load cursors
    Cursor cursor = viewer.getCursor();
    Cursor waitCursor = Cursor.getPredefinedCursor( Cursor.WAIT_CURSOR );
    viewer.setCursor( waitCursor );

    SwingUtilities.invokeLater( new PageLoader( viewer, url, cursor) );

    //Update tab title 
    setTitle();
    tabPanel.setTabTitle(this);

    //Update address bar
    addressTextField.setText(url.toString());


}

あなたが与えることができるどんな助けにも感謝します.

4

2 に答える 2

2
Determining when a process within invokeLater has completed
  • if (SwingUtilities.isEventDispatchThread()) {からテストすることが可能ですutil.Timer

  • しかし、この考えは良くありません。なぜなら、EDT を探す理由がなくなったからです。

  • Swing GUI ですべてのイベントが再描画された瞬間に EDT が終了しません。API に実装された通知機能からの内部プロセスがあります。

  • 基本的にWorkers Threadをシミュレートし、 SwingWorkerまたはRunnable#Threadを使用します (表示可能な GUI へのすべてのイベントは、invokeLater にラップする必要があります)。

于 2013-04-04T18:16:53.617 に答える
1

setTitle()コードの最後に etc. を付けPageLoader.run()ます。thisタイトルにアクセスできるように、コンストラクターにまたはいくつかの追加変数を渡す必要がある場合があります。

于 2013-04-04T16:29:28.737 に答える