确定invokeLater中的进程何时完成

时间:2013-04-04 16:25:27

标签: java swing swingutilities

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

我的所有方法都可以正常加载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());


}

感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:2)

Determining when a process within invokeLater has completed
  • 可以if (SwingUtilities.isEventDispatchThread()) {util.Timer

  • 进行测试
  • 但这个想法并不好,为什么要寻找EDT的理由结束了,

  • 在Swing GUI中重新绘制所有事件的时刻,EDT没有结束,API中实现了通知程序的内部过程

  • 基本上你模拟Workers Thread,使用SwingWorkerRunnable#Thread(所有可见的gui必须包含在invokeLater中)

答案 1 :(得分:1)

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