getProgress()和getNewValue()之间的Java差异
我为gui程序编写了一段代码 在这个程序中,有一个SwingWorker找出素数直到一个固定的数字。每一个素数都被公布和打印出来。 在计算过程中,会更新进程,因此会启动一个事件PropertyChangeEvent ChangePropertyListener必须使用SwingWorker的进度值更新JProgressBar 在ChangePropertyListener中,我不明白如何在以下各项之间获得进度值: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
- myChangePropertyEvent.getNewValue()
- mySwingWorker.getProgress()
有人能告诉我它们的区别,并解释getNewValue()是什么(我已经看过了文档,但它没有那么富有表现力)?它们两个有不同的用途。调用将返回SwingWorker实例的当前进度,正如名称所示。当坚持对应getter的约定时,它总是返回一个介于0和100之间的值。您可以在任何时候调用此方法,并且您将始终获得工作人员的最新状态。任何知道特定SwingWorker实例的客户端代码都可以随时调用该方法 另一方面,还有一个函数返回与getProgress相同的值。为了调用此方法,必须首先通过调用注册。注册此类侦听器后,它将接收有关工作人员进度的更新。现在有三个细微的区别:
总之,无论何时,只要您希望获取基于拉式的工人进度,即主动请求该值,都可以使用getProgress。无论何时,只要您希望获得有关进度更改的通知,而不是每次进度更改的通知,都可以使用PropertyChangeListener方法。作为旁注,
PropertyChangeEvent#getNewValue
与PropertyChangeEvent#getName
的值相关,当属性名为state
时,尝试获取预期为双精度的值没有意义:p感谢您指出这一点!我编辑了我的答案,将其作为第三个区别。在代码中,我将在哪里使用getProgress
来持续获取员工的进度?如果不是在propertyChangeListener中,你能提供一个例子吗?一个可能的(完全虚构的)场景:你开始一个swingworker。然后,使用计时器,在一秒钟后使用getProgress()方法检查工人的进度是否达到某一点。如果进度低于例如50,您希望向用户提供一些反馈,并显示一个带有进度条的对话框。否则,您只让工作人员完成其工作,而不显示详细的进度信息。基本上,getProgress在任何你想了解进度的地方都很有用,而不受实际进度变化的影响。