Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
getProgress()和getNewValue()之间的Java差异_Java_Multithreading_Swing_User Interface_Swingworker - Fatal编程技术网

getProgress()和getNewValue()之间的Java差异

getProgress()和getNewValue()之间的Java差异,java,multithreading,swing,user-interface,swingworker,Java,Multithreading,Swing,User Interface,Swingworker,我为gui程序编写了一段代码 在这个程序中,有一个SwingWorker找出素数直到一个固定的数字。每一个素数都被公布和打印出来。 在计算过程中,会更新进程,因此会启动一个事件PropertyChangeEvent ChangePropertyListener必须使用SwingWorker的进度值更新JProgressBar 在ChangePropertyListener中,我不明白如何在以下各项之间获得进度值: myChangePropertyEvent.getNewValue() mySw

我为gui程序编写了一段代码

在这个程序中,有一个SwingWorker找出素数直到一个固定的数字。每一个素数都被公布和打印出来。 在计算过程中,会更新进程,因此会启动一个事件PropertyChangeEvent

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

在ChangePropertyListener中,我不明白如何在以下各项之间获得进度值:

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

有人能告诉我它们的区别,并解释getNewValue()是什么(我已经看过了文档,但它没有那么富有表现力)?

它们两个有不同的用途。调用将返回SwingWorker实例的当前进度,正如名称所示。当坚持对应getter的约定时,它总是返回一个介于0和100之间的值。您可以在任何时候调用此方法,并且您将始终获得工作人员的最新状态。任何知道特定SwingWorker实例的客户端代码都可以随时调用该方法

另一方面,还有一个函数返回与getProgress相同的值。为了调用此方法,必须首先通过调用注册。注册此类侦听器后,它将接收有关工作人员进度的更新。现在有三个细微的区别:

  • 注册PropertyChangeListener后,无需 了解更多关于它正在收听的SwingWorker的信息。事实上 永远不需要知道它正在倾听的特定SwingWorker 对,给定另一个对象,通过
  • 调用SwingWorker时,可能会在调用方法之前累积值。这意味着,如果连续使用1、2和3调用setProgress,则PropertyChangeListener实例可能只调用一次,并返回3。这意味着您在选择此方法时可能会错过某些中间值
  • PropertyChangeListener将获得有关worker的任何绑定属性的更改的通知,即其进度和可用性

  • 总之,无论何时,只要您希望获取基于拉式的工人进度,即主动请求该值,都可以使用getProgress。无论何时,只要您希望获得有关进度更改的通知,而不是每次进度更改的通知,都可以使用PropertyChangeListener方法。

    作为旁注,
    PropertyChangeEvent#getNewValue
    PropertyChangeEvent#getName
    的值相关,当属性名为
    state
    时,尝试获取预期为
    双精度的值没有意义:p感谢您指出这一点!我编辑了我的答案,将其作为第三个区别。在代码中,我将在哪里使用
    getProgress
    来持续获取员工的进度?如果不是在propertyChangeListener中,你能提供一个例子吗?一个可能的(完全虚构的)场景:你开始一个swingworker。然后,使用计时器,在一秒钟后使用getProgress()方法检查工人的进度是否达到某一点。如果进度低于例如50,您希望向用户提供一些反馈,并显示一个带有进度条的对话框。否则,您只让工作人员完成其工作,而不显示详细的进度信息。基本上,getProgress在任何你想了解进度的地方都很有用,而不受实际进度变化的影响。