问题标签 [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.

0 投票
3 回答
1876 浏览

java - 强制子类实现抽象子类

我想在java中创建一个抽象类,强制它的所有子类实现a SwingWorker(加上SwingWorker's abstract doInBackground()and done())。

在 AbstractClass -

我希望这会导致编译器在扩展类未实现它时引发异常,但事实并非如此。

我也不太确定我将如何表明我正在覆盖这个抽象类。我是否按如下方式在 ConcreteClass 中重新声明它?

或其他方式?

感谢你的帮助!

0 投票
2 回答
2034 浏览

java - Swing:当 JTree 更新时间过长并冻结其他 GUI 元素时该怎么办?

我知道 Java Swing 中的 GUI 代码必须放在 SwingUtilities.invokeAndWaitSwingUtilities.invokeLater. 这种方式线程工作正常。

可悲的是,在我的情况下,GUI 更新它的时间比后台线程要长得多。更具体地说:我更新了一个只有大约 400 个条目的 JTree,嵌套深度最大为 4,所以应该没什么可怕的,对吧?但有时需要一秒钟!我需要确保用户能够毫无延迟地输入 JTextPane。好吧,猜猜看,缓慢的 JTree 更新确实会导致 JTextPane 在输入期间出现延迟。它仅在树更新后刷新。

我正在使用 Netbeans,并且凭经验知道 Java 应用程序可以更新大量信息而不会冻结 UI 的其余部分。

如何做呢?

注 1:所有这些DefaultMutableTreeNodes 都是在invokeAndWait.
注意 2:当我invokeAndWaitinvokeLater树替换时不会更新。
注意 3:发现递归树扩展花费的时间最多。
注 4:我正在使用自定义树单元格渲染器,将尝试不使用并报告。
注意 4a:我的树单元渲染器使用映射来缓存和重用创建JTextComponent的 s,具体取决于树节点(作为键)。

线索1:哇!如果不设置自定义单元格渲染器,它会快 10 倍。我想,我需要一些关于编写自定义树单元渲染器的好教程。可悲的是,我需要一个自定义单元格渲染器。

本教程涉及延迟加载可能会有所帮助,我将完成此操作。

0 投票
1 回答
847 浏览

java - Java Swingworker:不像封装类

我在使用不是封装类的 SwingWorker 类传递信息、更新进度和指示“完成”时遇到问题。

我有一个简单的类来处理硬盘驱动器上的文件和目录。用户单击“开始”按钮并启动 SwingWorker 的一个实例。

我想打印在来自 SwingWorker 的事件驱动线程中的 JTextArea 上处理的文件的名称作为更新进度条。网上所有的例子都是针对嵌套类的,嵌套类访问的是外部类中的变量(比如done方法)。我还想通知事件驱动线程 SwingWorker 已完成,以便 EDT 可以执行诸如启用“开始”按钮(和清除字段)之类的操作。

以下是我的问题: 1. SwingWorker 类如何将文本放入事件驱动线程的 JTextArea 并更新进度条?

  1. EDT 如何确定 { external } SwingWorker 线程何时完成?

{我不希望 SwingWorker 作为嵌套类,因为已经完成了很多代码(和处理)。}

0 投票
2 回答
258 浏览

java - Swingworker 生产重复输出/输出乱序?

使用 SwingWorker 时保证交付的正确方法是什么?我正在尝试将数据从 InputStream 路由到 JTextArea,并且我正在使用该execute方法运行我的 SwingWorker。我想我正在按照这里的例子,但我得到了乱序的结果、重复和一般的废话。

这是我的非工作 SwingWorker:

0 投票
1 回答
3328 浏览

java - Java - SwingWorker - process() 方法中的问题

我是javax.swing.SwingWorker第一次使用。

我想JLabel从 swing worker 发布的中期结果中更新 a 如下:

现在要更新JLabel,我编写了以下代码:

上面的代码有效,但我的问题(或者更具体地说,我的疑问)如下:

上面的 swing worker 任务是一个匿名的内部类,因此它可以访问label字段。

但是,如果我想让摇摆工人阶级成为非内部阶级怎么办。我是否需要label作为参数传递给 swing worker 类的构造函数,以便 process() 方法可以访问。

或者有没有其他方法?

当 Swing 工作类不是内部类时,其他开发人员遵循什么方法从 Swing 工作类的结果更新 UI 组件?

0 投票
3 回答
6340 浏览

java - 如何管理默认的 Java SwingWorker 线程池?

我有一个使用 2 个长时间运行的 SwingWorker 任务的应用程序,我刚刚遇到了几台 Windows 计算机,它们的 JVM 更新后只启动其中一个。没有指示错误,因此我必须假设默认线程池只有一个线程,因此当我尝试执行第二个 SwingWorker 对象时它正在排队。

那么,(1)如何检查默认 SwingWorker 线程池中有多少线程可用,以及(2)如果需要更多线程,如何添加线程?

还有什么我应该知道的吗?这种明显的单线程线程池情况违背了我的所有期望。

我正在设置一个 ThreadPoolExecutor 但这似乎很错误......

0 投票
3 回答
2716 浏览

java - 如何使用 SwingWorker 返回列表

我有一个任务,我必须创建一个图像库,它使用 aSwingWorker从文件加载图像,一旦加载图像,您可以翻转图像并播放幻灯片。我无法使用SwingWorker.

这就是在后台发生的事情,它只是将结果发布到 TextArea

}
}

完成后,我只需将图像插入 a 即可List<Image>

@Override protected void done() { 尝试 {

}

我还创建了一个返回被list调用的方法,getImages()我需要从中获取列表,getImages()但在我调用时不接缝execute()工作

一旦它到达imageList它不会返回任何东西我能够获取列表的唯一方法是当我使用run()而不是execute()有另一种方法来获取列表还是该run()方法是唯一的方法?或者我不理解这个Swing Worker类。

0 投票
3 回答
2246 浏览

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?

0 投票
4 回答
3977 浏览

java - Java - SwingWorker - 我们可以从另一个 SwingWorker 而不是 EDT 调用一个 SwingWorker

我有一个SwingWorker如下:

Swing Worker我从 EDT调用了上述内容:

现在,mainWorker创建一个MyTask类的 10 个实例,这样每个实例都将在自己的线程上运行,从而更快地完成工作。

但问题是我想在任务运行时不时更新 gui。我知道如果任务是由它mainWorker自己执行的,我可以使用publish()process()方法来更新 gui。

但是由于任务是由与线程不同的Swingworker线程执行的,我如何从执行任务的线程生成的中间结果中更新 gui。

0 投票
2 回答
8470 浏览

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