问题标签 [swingworker]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 强制子类实现抽象子类
我想在java中创建一个抽象类,强制它的所有子类实现a SwingWorker
(加上SwingWorker
's abstract doInBackground()
and done()
)。
在 AbstractClass -
我希望这会导致编译器在扩展类未实现它时引发异常,但事实并非如此。
我也不太确定我将如何表明我正在覆盖这个抽象类。我是否按如下方式在 ConcreteClass 中重新声明它?
或其他方式?
感谢你的帮助!
java - Swing:当 JTree 更新时间过长并冻结其他 GUI 元素时该怎么办?
我知道 Java Swing 中的 GUI 代码必须放在
SwingUtilities.invokeAndWait
或SwingUtilities.invokeLater
. 这种方式线程工作正常。
可悲的是,在我的情况下,GUI 更新它的时间比后台线程要长得多。更具体地说:我更新了一个只有大约 400 个条目的 JTree,嵌套深度最大为 4,所以应该没什么可怕的,对吧?但有时需要一秒钟!我需要确保用户能够毫无延迟地输入 JTextPane。好吧,猜猜看,缓慢的 JTree 更新确实会导致 JTextPane 在输入期间出现延迟。它仅在树更新后刷新。
我正在使用 Netbeans,并且凭经验知道 Java 应用程序可以更新大量信息而不会冻结 UI 的其余部分。
如何做呢?
注 1:所有这些DefaultMutableTreeNode
s 都是在invokeAndWait
.
注意 2:当我invokeAndWait
用invokeLater
树替换时不会更新。
注意 3:发现递归树扩展花费的时间最多。
注 4:我正在使用自定义树单元格渲染器,将尝试不使用并报告。
注意 4a:我的树单元渲染器使用映射来缓存和重用创建JTextComponent
的 s,具体取决于树节点(作为键)。
线索1:哇!如果不设置自定义单元格渲染器,它会快 10 倍。我想,我需要一些关于编写自定义树单元渲染器的好教程。可悲的是,我需要一个自定义单元格渲染器。
java - Java Swingworker:不像封装类
我在使用不是封装类的 SwingWorker 类传递信息、更新进度和指示“完成”时遇到问题。
我有一个简单的类来处理硬盘驱动器上的文件和目录。用户单击“开始”按钮并启动 SwingWorker 的一个实例。
我想打印在来自 SwingWorker 的事件驱动线程中的 JTextArea 上处理的文件的名称作为更新进度条。网上所有的例子都是针对嵌套类的,嵌套类访问的是外部类中的变量(比如done
方法)。我还想通知事件驱动线程 SwingWorker 已完成,以便 EDT 可以执行诸如启用“开始”按钮(和清除字段)之类的操作。
以下是我的问题: 1. SwingWorker 类如何将文本放入事件驱动线程的 JTextArea 并更新进度条?
- EDT 如何确定 { external } SwingWorker 线程何时完成?
{我不希望 SwingWorker 作为嵌套类,因为已经完成了很多代码(和处理)。}
java - Swingworker 生产重复输出/输出乱序?
使用 SwingWorker 时保证交付的正确方法是什么?我正在尝试将数据从 InputStream 路由到 JTextArea,并且我正在使用该execute
方法运行我的 SwingWorker。我想我正在按照这里的例子,但我得到了乱序的结果、重复和一般的废话。
这是我的非工作 SwingWorker:
java - Java - SwingWorker - process() 方法中的问题
我是javax.swing.SwingWorker
第一次使用。
我想JLabel
从 swing worker 发布的中期结果中更新 a 如下:
现在要更新JLabel
,我编写了以下代码:
上面的代码有效,但我的问题(或者更具体地说,我的疑问)如下:
上面的 swing worker 任务是一个匿名的内部类,因此它可以访问label
字段。
但是,如果我想让摇摆工人阶级成为非内部阶级怎么办。我是否需要label
作为参数传递给 swing worker 类的构造函数,以便 process() 方法可以访问。
或者有没有其他方法?
当 Swing 工作类不是内部类时,其他开发人员遵循什么方法从 Swing 工作类的结果更新 UI 组件?
java - 如何管理默认的 Java SwingWorker 线程池?
我有一个使用 2 个长时间运行的 SwingWorker 任务的应用程序,我刚刚遇到了几台 Windows 计算机,它们的 JVM 更新后只启动其中一个。没有指示错误,因此我必须假设默认线程池只有一个线程,因此当我尝试执行第二个 SwingWorker 对象时它正在排队。
那么,(1)如何检查默认 SwingWorker 线程池中有多少线程可用,以及(2)如果需要更多线程,如何添加线程?
还有什么我应该知道的吗?这种明显的单线程线程池情况违背了我的所有期望。
我正在设置一个 ThreadPoolExecutor 但这似乎很错误......
java - 如何使用 SwingWorker 返回列表
我有一个任务,我必须创建一个图像库,它使用 aSwingWorker
从文件加载图像,一旦加载图像,您可以翻转图像并播放幻灯片。我无法使用SwingWorker
.
这就是在后台发生的事情,它只是将结果发布到 TextArea
}
}
完成后,我只需将图像插入 a 即可List<Image>
。
@Override protected void done() { 尝试 {
}
我还创建了一个返回被list
调用的方法,getImages()
我需要从中获取列表,getImages()
但在我调用时不接缝execute()
工作
一旦它到达imageList
它不会返回任何东西我能够获取列表的唯一方法是当我使用run()
而不是execute()
有另一种方法来获取列表还是该run()
方法是唯一的方法?或者我不理解这个Swing Worker
类。
java - Java - SwingWorker - problem
I am developing a Java Desktop Application. This app executes the same task public class MyTask implements Callable<MyObject> {
in multiple thread simultaneously.
Now, when a user clicks on a "start" button, I have created a SwingWorker myWorker
and have executed it.
Now, this myWorker
creates multiple instances of MyTask
and submits them to an ExecutorService
.
Each MyTask
instance has a loop and generates an intermediate result at every iteration. Now, I want to collect these intermediate results from each MyTask
instances as soon as they are generated. Then after collecting these intermediate results from every MyTask
instance, I want to publish it through SwingWorker.publish(MyObject)
so that the progress is shown on the EDT.
Q1. How can I implement this? Should I make MyTask
subclass of SwingWorker
instead of Callable
to get intermediate results also, because I think that Callable
only returns final result.
Q2. If the answer of Q1. is yes, then can you give me a small example to show how can I get those intermediate results and aggregate them and then publish them from main SwingWorker
?
Q3. If I can't use SwingWorker
in this situation, then how can I implement this?
java - Java - SwingWorker - 我们可以从另一个 SwingWorker 而不是 EDT 调用一个 SwingWorker
我有一个SwingWorker
如下:
Swing Worker
我从 EDT调用了上述内容:
现在,mainWorker
创建一个MyTask
类的 10 个实例,这样每个实例都将在自己的线程上运行,从而更快地完成工作。
但问题是我想在任务运行时不时更新 gui。我知道如果任务是由它mainWorker
自己执行的,我可以使用publish()
和process()
方法来更新 gui。
但是由于任务是由与线程不同的Swingworker
线程执行的,我如何从执行任务的线程生成的中间结果中更新 gui。
java - Java - SwingWorker 和 SwingUtilities.invokeLater() 之间的区别
SwingWorker
用于以下目的:
- 用于在不同线程中运行长时间运行的任务,以防止 GUI 无响应
- 用于通过方法在任务结束时使用长时间运行的任务产生的结果更新 GUI
done()
。 publish()
用于在和process()
方法的帮助下使用任务生成和发布的中间结果不时更新 GUI 。
SwingUtilities.invokeLater()
可以按如下方式执行上述任务:
SwingWorker.execute()
我们可以执行,而不是从 EDT执行方法,ExecutorService.submit(new MyRunnable())
因为它还会创建另一个可以执行长时间运行的任务的线程。- 为了在任务结束时更新 GUI,我们可以将代码(用
done()
case1 的方法编写)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode())
放在任务结束时。 - 为了在任务中间更新GUI,我们可以将代码(写在
process()
case1的方法中)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())
放在我们调用case1方法的地方publish()
。
我问这个问题是因为问题中指定的问题Java - SwingWorker - 我们可以从其他 SwingWorker 而不是 EDT 调用一个 SwingWorker可以解决SwingUtilities.invokeLater()
但不能解决SwingWorker