问题标签 [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 投票
1 回答
505 浏览

java - 我可以在另一个中运行一个 SwingWorker 吗?

我需要运行两个SwingWorkers。其中一个只能在另一个完成后运行。我可以这样运行它们吗?

我应该如何取消它们?像这样?

非常感谢!

0 投票
2 回答
1286 浏览

java - EDT问题的Java摆动进度条

这是给挥杆专家的。我在这个问题上花费了相当多的时间,所以我要花几行来解释这个问题。

我有一个独立的 java swing 应用程序(java 6)。在我的应用程序中,我有一个带有单选按钮组的框架。我有一个链接到组中所有按钮的操作。该操作检查以查看选择了哪个单选按钮并执行一些工作。“工作”涉及一些背景计算以及在我的应用程序中的其他两个框架中的一些绘画。后台计算是多线程的。

当用户选择其中一个单选按钮时,我想显示一个进度条。However, when a radio button is selected, while the action to the radio button is happening, the progress bar never appears. 我尝试过 jdialog 类型的进度条、玻璃窗格等。在“工作”全部完成之前,它们都不会出现。这似乎是因为 Swing 直到完成相应动作中的“工作”才完成单选按钮的绘制。而且由于 EDT 一次只做一件事,因此永远不会显示进度条对话框(或玻璃窗格)。

然后我尝试使用 SwingWorker 来完成所有这些“工作”。启动进度条(或激活玻璃窗格),启动 SwingWorker 并在 SwingWorker 的 done() 方法中关闭进度条(或停用玻璃窗格)。这似乎可以很好地调出进度条,但是作为“工作”的一部分的绘画有时没有完成,给我留下了一些绘画工件(paintComponent 方法相当复杂,所以这里不想重现)。如果我调整窗口大小,工件就会消失。事实上,如果我使用扩展 Thread 而不是 SwingWorker 的类,就会发生这种情况。这完全是因为 Swing 不是线程安全的,我试图从 EDT 以外的线程执行 GUI 工作。我理解那部分。

我该怎么办?“工作”大约需要 30 秒,如果不向用户显示程序正在运行的某种指示,这似乎太长了。我也尝试将光标更改为等待光标并遇到与上述相同的问题。我唯一能做的就是禁用框架并将框架的标题设置为一些文本,如“工作......”

以前有人见过这个问题吗?

0 投票
3 回答
2690 浏览

java - 等待取消的未来真正完成

我有一个SwingWorker调用一些不检查线程中断的代码。在调用 之后worker.cancel(true),该worker.get()方法将立即抛出CancellationException(正如它应该的那样)。然而,由于后台任务的代码从不检查它的线程是否被中断,它很高兴地继续执行。

是否有等待后台任务实际完成的标准方法?我正在寻找显示“取消...”消息或类似的内容并阻止,直到任务终止。(我敢肯定,如有必要,我总是可以在工人阶级中使用标志来完成此任务,只是寻找任何其他解决方案。)

0 投票
3 回答
2214 浏览

java - Swing 工作线程不并发

似乎当我实例化 12 个 Swing Worker 线程时,前六个开始完成它的任务,它完成,然后最后六个开始并完成。我正在寻找的行为是所有 12 个线程同时开始工作并同时完成。

我有以下内容:

myTask m 将以 25 为增量从 0 到 100 增加一个进度条。我得到的奇怪行为是前六个线程开始增加,它们在 100 处结束,然后最后六个线程从 0 开始并增加,然后结束。

一个人可能拥有的 Swing Worker 线程的数量是否存在限制因素?

0 投票
2 回答
1358 浏览

java - Swing/SwingWorker 初学者的问题

我正在尝试在 java 中实现 GUI,但我是摇摆的初学者。我想澄清一点。我读到为了保持 GUI 响应,我应该使用 SwingWorker 类在单独的线程中执行任务。到目前为止还好。不,我有一个模型,其中包含大约 15 种远程方法。作为结果,每个方法都返回不同的对象类型。在我看来,用户按下按钮并调用模型中的适当方法。如果不使用 swingworker,GUI 就会冻结。我的问题是,我是否应该创建 15 个 Swingworker 线程的子类,并根据用户的操作根据需要为每个线程创建一个 NEW 实例?我的理解正确吗?有没有标准的方法或者我说的是正确的方法?

谢谢!

0 投票
1 回答
480 浏览

java - 线程限制/swingworkers

我不清楚线程限制。在 Swing 中,所有 gui 组件都必须通过 EDT 更新。Java6 中提供了 SwingWorker 用于冗长的操作,并且在 done 方法中可以更新 gui 组件。我的理解是 done() 方法中的 gui 组件在 EDT 中更新。因此应该没有同步问题。但这里链接文本

它说:

因为 ImageRetriever 类会下载一张图片并将其放在一个大标签上,所以在构造函数中提供标签和图片 URL 很方便。ImageRetriever 需要 URL 来检索图像。提供标签,以便 ImageRetriever 实例可以自行设置标签的图标。如果您使用内部类,您甚至可能不会在构造函数中提供此信息,因为工作线程将能够直接访问这些信息。但是,在构造函数中提供信息有助于您的应用程序更加线程安全,因为该信息不会在 ImageRetriever 实例之间共享

我对此感到困惑。如果 SwingWorker 方法更新 EDT 中的 gui 组件(在链接的示例中为 JLabel),为什么不在 ImageRetriever(=SwingWorker) 实例之间共享它们更线程安全?如果我们有多个 SwingWorker 并且在 done() 方法中它们更新同一个组件,我们必须使用同步原语进行更新吗?我是不是误会了什么?线程限制不是意味着只有 1 个线程会执行所有操作吗?swingworkers不是线程受限的吗?

谢谢

0 投票
2 回答
1283 浏览

java - swingworkers的背景任务变得顺序

我正在使用 SwingWorkers 使我的 GUI 响应。但我无法理解以下内容:当用户按下按钮时,我想从 GUI 调用一个远程方法。我在按钮的操作内(简写问题):

我的问题是,虽然 gui 似乎反应灵敏,但对远程方法的实际调用是顺序的,而不是并发的。我在网络跟踪中注意到它,并认为该方法正在阻塞。但后来我在跟踪中看到 SwingWorkers 似乎是按顺序运行的。从

日志 2010-09-06 16:58:22,962 [ SwingWorker-pool-4-thread-1 ] 调试 -->第一个远程方法调用

我得到响应,然后第二个 swingworker 运行

2010-09-06 16:58:23,227 [ SwingWorker-pool-4-thread-1 ] 调试 --> 第二个远程方法调用

为什么会这样?我认为这是随机交错,但我注意到这两个实例具有相同的名称?摇摆工人是否集中在一起?这是随机行为吗?我不应该看到 2 个并发呼叫吗?如果它们被重用,我能做些什么来进行并发调用而不是并行?

谢谢

0 投票
2 回答
1768 浏览

java - 实时显示动态数据的架构

执行摘要:使用 Swing 实时显示线程安全的动态数据有哪些合理的架构选择?

详细信息:我最近完成了用 Java 编写的多线程自动交易平台。我之所以说“平台”,是因为我通过对虚拟对象进行子类化,使得实现新的和多个交易程序变得非常容易。我已经封装了交易代码,因此我可以在 Swing 应用程序、控制台应用程序或任何其他应用程序中使用它。目前我正在使用 Swing 前端运行它。

我会说我是 Swing 滥用者而不是用户。不是故意的。开发现代 GUI 并将其与我尚未学习的动态数据集成需要一种特殊的思维方式。我知道非常基础的知识,例如仅在事件调度线程中更新屏幕。这是我显示消息的方式(来自我的SingleFrameApplication子类):

这里的数据元素只是

任何数量的“交易者”(单独的线程)都可能随时插入消息。我使用的另一种数据对象是ConcurrentHashMap. 我在其中收集订单日志、交易记录、价格和其他类型的数据。因此,我在这里尝试绘制的图片是大量与时间相关的数据,太多了,无法一次显示。

我真正想做的是显示摘要信息并具有向下钻取的能力。现在我正在显示JTextAreas一些信息和其他信息JTextFields。我可以阅读 JCoolWhatever 并在其中填充数据。但在我开始这条路之前,我想了解其他架构选择。

方法 1:使用 SwingWorkers 抓取数据并将其粘贴JWhatever在我的FrameView子类中。

方法二:???

...

我们想要:

(1)合理的模块化......足以添加/删除元素而不会破坏我们的夜晚

(2)交互能力,特别是下钻能力,因为数据太多

谢谢... 一组复杂的动态数据的实时显示是一个有趣的主题,我希望我们能进行良好的讨论。

0 投票
1 回答
1596 浏览

java - 有没有办法暂停/恢复 SwingWorker

有没有办法在 Java中暂停/恢复SwingWorker ?

0 投票
4 回答
7036 浏览

java - 多次执行 SwingWorker

我希望能够SwingWorker多次使用子类。这可能吗?

我在java文档中读过:

SwingWorker仅设计为执行一次。SwingWorker多次执行 a不会导致调用该doInBackground方法两次。