我正在使用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());
}
感谢您提供任何帮助。
答案 0 :(得分: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中)
答案 1 :(得分:1)
将setTitle()
等放在PageLoader.run()
代码的末尾。您可能需要将this
或其他一些变量传递给它的构造函数,以便您可以访问标题。