gpt4 book ai didi

java - 获取 Java ProgressMonitor 的取消事件

转载 作者:搜寻专家 更新时间:2023-10-31 19:40:30 26 4
gpt4 key购买 nike

我有一个 ProgressMonitor pm 和一个 SwingWorker sw。当我在 pm 上按 cancel 按钮时,我想取消 SwingWorker。我想这应该不会太难,我阅读了一些关于 SwingWorker 和 ProgressMonitor 的教程,但我无法让它工作。

final ProgressMonitor pm = new ProgressMonitor(frame, "checking", "...", 0, 100);
final SwingWorker sw = new SwingWorker()
{
protected Object doInBackground() throws Exception
{
doSomethingAndUpdateProgress();
}
};

sw.addPropertyChangeListener(new PropertyChangeListener()
{
public void propertyChange(PropertyChangeEvent evt)
{
if(evt.getPropertyName().equals("progress"))
{
updateProgress();
}
if(pm.isCanceled())
{
cancelAction();
}
if(pm.isDone())
{
doneAction();
}
}
});

sw.execute();

进度更新工作正常,但 pm.isCanceled() 永远不会 true。我想我需要一个用于 ProgressMonitor 的 propertyChangeListener,但我不知道如何在其中添加一个。

最佳答案

在执行长时间运行的任务期间,您想定期检查 ProgressMonitor 是否已取消。您的工作是在取消任务有意义的地方进行检查 - 否则谁知道您可以保留哪些资源。

基本上,您想要更改 doSomethingAndUpdateProgress() 方法,以便它也检查 ProgressMonitor 是否已取消。

这是一个展示其工作原理的演示:

import java.awt.*;
import javax.swing.*;

public class TempProject extends Box{

public TempProject(){
super(BoxLayout.Y_AXIS);
final ProgressMonitor pm = new ProgressMonitor(this, "checking", "...", 0, 100);
final SwingWorker sw = new SwingWorker<Integer, Integer>()
{
protected Integer doInBackground() throws Exception
{
int i = 0;
//While still doing work and progress monitor wasn't canceled
while (i++ < 100 && !pm.isCanceled()) {
System.out.println(i);
publish(i);
Thread.sleep(100);
}
return null;
}


@Override
protected void process(java.util.List<Integer> chunks) {
for (int number : chunks) {
pm.setProgress(number);
}
}

};

sw.execute();
}


public static void main(String args[])
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setContentPane(new TempProject());
frame.pack();
frame.setVisible(true);
}
});
}


}

关于java - 获取 Java ProgressMonitor 的取消事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12108127/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com