getProgress() 和 getNewValue() 之间的 Java 区别

标签 java multithreading swing user-interface swingworker

我写了一个 gui 程序的代码。

在这个程序中有一个 SwingWorker 来找出素数直到一个固定的数字。每个质数都被出版和打印。 在计算进度更新期间,启动事件 PropertyChangeEvent。

ChangePropertyListener 必须使用 SwingWorker 的进度值更新 JProgressBar。

在 ChangePropertyListener 中,我不明白如何获取进度值:

  • myChangePropertyEvent.getNewValue()
  • mySwingWorker.getProgress()

有人可以告诉我差异并解释 getNewValue() 的作用吗(我还看过文档,但它的表现力不强)?

最佳答案

他们两个服务于不同的目的。来电 SwingWorker.getProgress如名称所示,返回 SwingSorker 实例的当前进度。当遵守SwingWorker.setProgress(int)的契约(Contract)时相应的 getter 总是返回一个介于 0 和 100 之间的值。您可以随时调用此方法,您将始终获得工作人员的最新状态。任何知道特定 SwingWorker 实例的客户端代码都可以随时调用该方法。

另一方面有PropertyChangeEvent.getNewValue()它返回与 getProgress 相同的值。为了调用此方法,您必须先注册一个 PropertyChangeListener。调用SwingWorker.addPropertyChangeListener(PropertyChangeListener) .一旦注册了这样的监听器,它将收到有关工作人员进度的更新。现在存在三个细微差别:

  1. 注册 PropertyChangeListener 后不需要 了解更多关于它正在收听的 SwingWorker 的信息。事实上它 永远不需要知道它正在监听的特定 SwingWorker 完全没有,给定另一个对象通过 SwingWorker.addPropertyChangeListener(PropertyChangeListener) .
  2. 调用SwingWorker.setProgress(int)时SwingWorker 可能会在调用 PropertyChangeListener.propertyChange(PropertyChangeEvent) 之前累积值方法。这意味着如果您连续使用 1、2 和 3 调用 setProgress,PropertyChangeListener 实例可能只被调用一次并且 PropertyChangeEvent.getNewValue()将返回 3。这意味着您在选择此方法时可能会错过某些中间值。
  3. PropertyChangeListener 将获知任何 worker 的绑定(bind)属性的变化,即它的进度和它的 state。 .

总而言之,只要您想在拉动的基础上获得工作人员的进度,即主动请求值,请使用 getProgress。每当您想要了解进度变化时使用 PropertyChangeListener 方法,并且不了解进度的每个变化对您来说都是可以接受的。

关于getProgress() 和 getNewValue() 之间的 Java 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45177188/

相关文章:

Java线程停止没有异常

c++ - pthread 窗口崩溃 C++

windows中的c线程HWND错误

java - 使用 ChangeListener 触发 Java Swing 中的更改?

Java 构造函数重载和异常的问题

java - 我无法使用 javax.servlet 版本 2.5 导入 javax.servlet.FilterRegistration

java - 使用串行通信在微 Controller 上写入数据时出现问题

java - 当 JScrollBar 移动时显示行号

java - Spring 可选参数 int

Java 音频效果 - Android 上的失真算法