jswing执行一项长期任务

时间:2015-05-10 17:29:51

标签: java multithreading swing swingworker

我是java的新手

我在 PhotoPoster类中有一个函数 runner (PhotoPoster类是一个包含大量按钮和其他GUI元素的Jframe)

当我点击 START 时,它会包含一个 START 按钮,它会执行运行活动的跑步者功能 &安培;这需要很长时间 除非转轮功能完成,否则无法访问其他GUI组件。

我希望这可以在单独的线程或任何其他解决方案中帮助我

我目前所做的是

我创建了另一个类 GuiWorker.java

public class GuiWorker extends SwingWorker<Integer, Integer>{

    public GuiWorker() throws IOException {

    }

    protected Integer doInBackground() throws Exception {
        PhotoPoster photoPoster = new PhotoPoster();
        photoPoster.ruuner();
        return 0;
    }

    protected void done() {
        System.out.println("done");
    }
}

PhotoPoster.java

点击按钮

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         


       // PhotoPoster photoPoster = new PhotoPoster();


              //ruuner();


   EventQueue.invokeLater( new Runnable() {



       @Override
      public void run() {

          try {
              new GuiWorker().execute();
          } catch (IOException ex) {
              Logger.getLogger(PhotoPoster.class.getName()).log(Level.SEVERE, null, ex);
          }

          }
        });




    }  

它使系统输出完成但不执行跑步者功能活动

请帮我解决此错误或任何其他解决方案

1 个答案:

答案 0 :(得分:1)

看起来您正在将长时间运行的线程排队到事件调度线程,这意味着即使您正在执行invokeLater,它仍将阻止该线程。

您需要使用SwingWorker