【发布时间】:2014-08-04 08:42:27
【问题描述】:
我有一些代码在 swingworker 中运行,因为它可能会导致 UI 阻塞,我想根据 swingworker 线程的进度来修改 UI,所以我使用发布/处理来修改 JLabel,它可以工作,但是我还想修改其他 UI 组件,这是唯一的线程安全方法吗,通过 process 方法?
我曾经在运行它时遇到过这个异常,我认为是因为我在 doInBackground 方法中而不是从 process 方法中修改 UI 组件?
java.lang.Boolean cannot be cast to javax.swing.Painter
【问题讨论】:
-
使用 SwingWorker 的 PropertyChange 支持,将 PropertyChangeListener 附加到它并监视“progress”属性。在 SwingWorker 中,调用 setProgress 来更新这个属性,for example
-
@MadProgrammer 抱歉,您的意思是向标签添加 PropertyChangeListener 吗?
-
不,到
SwingWorker,看链接的例子 -
@MadProgrammer 抱歉,如果这是一个愚蠢的建议,但将创建和执行 swingworker 的调用包含在稍后可运行的调用中是一个解决方案吗? :
javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { FireComputerShots fireCompShots = new FireComputerShots(); // Call the swing worker thread fireCompShots.execute(); } }); -
我不确定我是否理解,正如我所看到的,您的 Swingaworker 正在生成现有类型的对象,但您想知道这项工作的进展情况,SwingWorker 已经通过 PropertyChangeListener 提供了进度支持支持
标签: java multithreading swing