0

我正在使用 invokeLater() 在 JTabbedPane 内的 JPanel 内的 JEditPane 中加载 html 页面。

我所有的方法都可以很好地加载 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()) {from进行测试util.Timer

  • 但是这个想法并不好,为什么寻找EDT的理由结束了,

  • EDT 在 Swing GUI 中重新绘制所有事件的那一刻并未结束,API 中实现了来自通知程序的内部进程

  • 基本上你模拟Workers Thread,使用SwingWorkerRunnable#Thread(可见 Gui 的所有事件都必须包装到 invokeLater 中)

于 2013-04-04T18:16:53.617 回答
1

setTitle()等放在代码的末尾PageLoader.run()。您可能需要将this一些额外的变量传递给它的构造函数,以便您可以访问标题。

于 2013-04-04T16:29:28.737 回答