我想等待我的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占用?
答案 0 :(得分:3)
我认为使用空循环是个坏主意, SwingWorker
protected void done()
您可以在其中定义完成后执行的代码, 那么你可以使用listerners和触发动作,如果你想在SW外执行
答案 1 :(得分:3)
您需要覆盖done
的<{1}}方法。
在doInBackground方法完成后在Event Dispatch Thread上执行。默认实现什么都不做。子类可以重写此方法以对Event Dispatch Thread执行完成操作。请注意,您可以在此方法的实现中查询状态,以确定此任务的结果或此任务是否已取消。
SwingWorker
以及需要时间执行的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) {
答案 2 :(得分:0)