在执行长期运行的任务期间,您要定期检查是否
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); } }); }}


