繁体   English   中英

等待线程在Java中完成

[英]Wait for thread to finish in Java

我有一些代码在一个单独的线程中执行下载,创建后JFrame GUI将在下载过程中继续更新。 但是,当我使用Thread.join()时,目的完全失败,因为它导致GUI停止更新。 我需要一种方法来等待线程完成并仍然更新GUI。

您可以让执行下载的任务也向GUI发出事件。

例如:

Runnable task = new Runnable() {
   public void run() {
      // do your download

      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            // call some method to tell the GUI that the download finished.
         }
      });
   }
};

然后运行它,使用Executor (首选方法)或原始线程:

executor.execute(task);

要么

new Thread(task).start();

正如评论中指出的那样,您通常使用SwingWorker来执行此类操作,但您也可以执行上面概述的手动方法。

SwingWorker提供了一个doInBackground方法,您可以在其中使用下载逻辑,这done一种done方法,您可以在其中使用代码来通知GUI下载完成,以及get doInBackground结果的get方法(如果有的话)。

例如,

class Downloader extends SwingWorker<Object, Object> {
   @Override
   public Object doInBackground() {
       return doDownload();
   }

   @Override
   protected void done() {
       try { 
         frame.downloadDone(get());
       } catch (Exception ignore) {
       }
   }
}

(new Downloader()).execute();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM