我想等待我的SwingWorker完成工作,然后我想执行另一个SwingWorker。在本例中,Encrypteer3是一个扩展SwingWorker的类。
我的代码:
input = txtTekst.getText();
key = txtKey.getText();
System.out.println("thread1 start");
Encrypteer3 a = new Encrypteer3();
a.execute();
while(a.isDone()==false){
// do nothing
}
input = output;
key = txtKey1.getText();
System.out.println("thread2 start");
Encrypteer3 b = new Encrypteer3();
b.execute();
while(b.isDone()==false){
// do nothing
}这使我的GUI冻结,并使用了大量的CPU (java在执行此命令时使用了大约95%的CPU )。我认为问题是它不断地检查线程是否已经完成,这就是它占用CPU的原因。
SwingWorker类上没有join()方法。我怎样才能减少对CPU的消耗?
发布于 2011-11-13 21:50:28
我认为使用空循环是不好的主意,SwingWorker
protected void done()你可以定义代码在完成时执行,然后如果你想在SW之外执行,你可以使用listerners和触发动作
发布于 2011-11-13 21:58:32
您需要覆盖SwingWorker中的done方法。
来自SwingWorker#done()的文档
doInBackground方法完成后在事件调度线程上执行的
。默认实现不执行任何操作。子类可以重写此方法以在事件调度线程上执行完成操作。请注意,您可以在此方法的实现内部查询状态,以确定此任务的结果或此任务是否已被取消。
public class Encrypteer3 extends SwingWorker<Void, Void>{
@Override
protected Void doInBackground() throws Exception {
// background task
return null;
}
@Override
protected void done() {
// will be executed when background execution is done
}
}而while(a.isDone()==false) {的执行则需要时间。
while(a.isDone()==false) {
// do nothing
}https://stackoverflow.com/questions/8111946
复制相似问题