我似乎对 SwingWorker 有疑问。我基本上实现了从我的 JFrame 的 propertyChange() 方法更新 UI 的 Java 示例代码。
我还在 doInBackground 中复制了最多一秒钟的睡眠部分。这使我的 Worker 中的 setProgress 更新率很高。
然而,propertyChange 事件大约每 10 秒触发一次。我从 API 知道并非每个 setProgress 都会触发一个事件,我对此表示满意,但是这似乎有点慢,并且丢失了太多事件。
在调试器中单步执行时,我得到了更好的速度,〜每 3 次调用 setProgress
任何想法为什么它这么慢?
以下是我的代码的部分:
public Void doInBackground() {
Random random = new Random();
setProgress(0);
float getSize=0,gotSize=0;
while (Sync.syncing) {
//Sleep for up to one second.
try {
Thread.sleep(random.nextInt(1000));
} catch (InterruptedException ignore) {
ignore.printStackTrace();
}
try{
getSize=Main.getSyncGet();
gotSize=Main.getSyncGot();
System.out.println("setProgress: "+(gotSize/getSize));
setProgress((int)((gotSize/(getSize))*100));
}catch(Exception e){
Main.LOGGER.log(Level.WARNING,"Error setting progress",e);
}
}
return null;
}
public void propertyChange(PropertyChangeEvent evt) {
if ("progress" == evt.getPropertyName()) {
jpb.setValue((Integer) evt.getNewValue());
}
}
亲切的问候
延斯