天天看点

java 事件cancel_获取Java ProgressMonitor的cancel事件

小编典典

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

{

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 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);

}

});

}

}

2020-10-16