【问题标题】:Java swingworker outputJava swingworker 输出
【发布时间】: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


【解决方案1】:

SwingWorker 通过set/getProgress 方法和PropertyChangeListener 的支持提供进度功能。

您可以将PropertyChangeListener 附加到SwingWorker 并监视progress 属性的更改,以您需要的方式更新UI。

您可以在 doInBackground 方法的内部使用 setProgress 来更新进度状态。

Issues with SwingWorker and JProgressBar 为例

【讨论】:

    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多