等待SwingWorker完成

use*_*090 7 java concurrency swing multithreading swingworker

我想等待我的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
    }
Run Code Online (Sandbox Code Playgroud)

这使我的GUI冻结并使用了大量的CPU(java在执行时使用了大约95%的CPU).我认为问题是它不断检查线程是否已完成,这是什么使它如此CPU密集.

SwingWorker类上没有join()方法.如何减少CPU占用?

Jan*_*cak 3

我认为使用空循环是个坏主意,SwingWorker 有

protected  void done()
Run Code Online (Sandbox Code Playgroud)

您可以在其中定义完成时执行的代码,如果您想在软件之外执行,则可以使用侦听器和触发操作

  • 问题是我根据情况使用 SwingWorker 的次数不同。我使用了 PropertyChangeListener,结果成功了!感谢你的回答 (2认同)