- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 SwingWorker,它在后台读取和处理文件,然后在 JTextPane 中格式化并以各种样式显示数据。
如果文件很大(超过 200K),我将显示一个带有进度条的对话框。在 SwingWorker 的 done() 方法中,我填充了 JTextPane,然后隐藏了对话框。 done() 方法如下所示:
protected void done() {
populateTextPane();
hideProgressDialog();
System.out.println("After hideProgressDialog");
}
当它运行时,我会看到对话框消失,控制台上出现 println 消息,但随后 GUI 又卡住了 10-15 秒,卡住结束时数据在 JTextPane 中可见。
我认为 done() 方法中发生的任何事情都会在事件调度线程中发生。但显然 JVM 正在生成另一个线程来隐藏对话框并在填充 JTextPane 时执行 println。我想一直显示进度对话框,直到 GUI 准备好再次接受用户输入...我如何检测 done() 中的所有内容何时真正完成?
最佳答案
done
方法在 EDT 上执行。如果您对此有疑问,可以随时使用 EventQueue.isDispatchThread()
方法进行检查。
一个可能的解释是 populateTextPane()
方法安排了在 EDT 上重绘 JTextPane
。这意味着 done()
方法已完成,然后您才能在 UI 中看到 populateTextPane()
方法的结果。
你可以尝试如下重写done
方法
protected void done() {
populateTextPane();
SwingUtilities.invokeLater( new Runnable(){
@Override
public void run(){
hideProgressDialog();
System.out.println("After hideProgressDialog");
}
} );
}
这将确保 hideProgressDialog
仅在 EDT 上 populateTextPane()
任何可能的 Runnable
计划之后执行。但是,这仍会使您的 UI 卡住 10-15 秒。唯一的区别是进度对话框仍然可见。
如果进度对话框显示在 JTextPane
的顶部,不确定这是否有效。 RepaintManager
可能决定仅在对话框变得不可见后重绘 JTextPane
(因此不再隐藏 JTextPane
)。
关于java - Swingworker.done() 在完成后卡住 GUI 几秒钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15604782/
我有一个 SwingWorker 如下: public class MainWorker extends SwingWorker(Void, MyObject) { : : } 我从
我正在尝试从另一个 SwingWorker (MainWorker) 执行 SwingWorker (SubWorker),然后我希望 MainWorker 等待 SubWorker 完成。同时,Ma
我试图在 SO 上找到我的问题的答案,但由于它们的丰富性和多样性,我有点困惑。这是我的问题:我的应用程序比较两个文件并在 Swing.JTextPane 中打印结果。我使用按钮调用处理文件的代码,为了
我使用一个扩展 SwingWorker 的类,如下所示: public class Analyzer extends SwingWorker { String source; public A
我有一个作为 Java SwingWorker 运行的套接字服务器。 SwingWorker 接收传入的连接,并在连接后将套接字移交给负责连接的执行器。 Executor 调用将通过 run() 方法
我需要运行两个 SwingWorker。其中一个只能在另一个完成后才能运行。我可以像这样运行它们吗? class TestWorker { private FirstWorker worker
我对SwingWorker有疑问它是done()方法。我有一个通过 SPI 支持插件的应用程序,所以我基本上无法更改插件的行为。这些插件必须实现的接口(interface)包含方法 List getC
jList 模型中包含的数据由 swingworker 更新。问题是我在独立的 *.java 文件中对 SwingWorker 类进行了子类化。所以我无法访问 GUI 组件(在本例中为模型和 jLis
我正在创建一个进度条来监控图像下载。图像下载不起作用 - 它会生成一个大小为 0 字节的文件。如果我将代码移至没有 SwingWorker 的独立类,则图像下载可以正常工作。我已经玩了一段时间了,但我
首先,我需要通知您,我正在尽最大努力学习如何使用 Java 编写代码。这有点困难,但是,我相信我做到了。我过去曾提交过几个关于 SwingWorkers 等的问题。每一个我都以为我拥有它,但后来发现我
假设一个应用程序读取数据文件,从用户获取一些输入(通过 GUI),从大型数据库获取附加数据并执行冗长的分析。 按照建议,我将耗时的部分(数据库管理和实际分析)删除到了 SwingWorker 实例中。
我有几个 SwingWorker 正在运行,它们都需要 OpenNLP 进行计算。OpenNLP 需要一些时间进行初始化,所以我想知道最好的方法是什么?我想在每个 SwingWorker 中启动一个
我有一个小 gui 程序,它在启动时从 Excel 文件中读取数据,其中一些数据需要转到相关的组合框。我知道如何通过为每个组合框使用单独的 SwingWorker 来做到这一点: public cla
有人能告诉我为什么在这个使用 SwingWorker 的简单演示中,屏幕闪烁,好像按钮不断跳跃一样? (关于改进多线程部分的反馈也值得赞赏)。 import java.awt.EventQueue;
在 Netbeans 中,我创建了一个 GUI 项目,该项目使用框架前端,我可以添加组件并双击以编辑其事件。我指的是具有“源”、“设计”和“历史”选项卡的窗口。 以下是组件和关系: 1- 打开文件选择
有没有办法在调用“swingWorker.execute”之前将数据(例如对象)传递给 swingWorker? 最佳答案 通常,我通过使 SwingWorker 的构造函数需要所需的对象来处理此问题
我有这样的代码 try { ServerSocket serverSocket = null; try { serverSocket = new
如何获取代码当前运行的SwingWorker?您可以使用 Thread.currentThread() 来获取 Thread 实例,但我需要 SwingWorker 实例。 代码来自评论 privat
我有一个扩展 SwingWorker 的类。在它的后台线程中,如果成功更改布局并向框架添加新面板,我应该登录。因此 Swing Worker 执行以下 3 项任务: 登录 更改布局 添加/删除面板。
我有一个 swingworker,我想用它从 doInBackground() swingworker 方法中调用另一个对象的大型且复杂的方法。 看起来像这样: public class HostGa
我是一名优秀的程序员,十分优秀!