gpt4 book ai didi

java - 确定 invokeLater 中的进程何时完成

转载 作者:行者123 更新时间:2023-12-01 23:54:26 27 4
gpt4 key购买 nike

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

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


}

感谢您提供的任何帮助。

最佳答案

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 中)

关于java - 确定 invokeLater 中的进程何时完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15816615/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com