一旦Dropbox列表文件显示在JList中,如何停止SwingWorker?

时间:2016-08-24 08:44:24

标签: java netbeans dropbox swingworker

我有一个JList,它显示了Dropbox帐户中的文件列表(Dropbox API v2)。

文件列表使用swingworker工作,但是,我可以在任务完成后自动停止或取消swingworker。

我试过了 - > task.cancel(true);但它在列表完全加载到JList之前取消了该任务。下面是我到目前为止的编码,我知道我非常接近,但是一旦在JList中成功加载文件名,就无法弄清楚如何取消任务。

一旦完成任务,请有人帮助我取消任务。

private TaskLoadFiles tLoadtask;
    private class TaskLoadFiles extends SwingWorker<Void, String>
    {

        @Override
        protected Void doInBackground() throws InterruptedException
        {

            while (!isCancelled())
            {
                 try
                {

                    ListFolderResult resultdec = client.files().listFolder("/Data/");
                    //model used to stored the data for display
                    DefaultListModel modelListFilesdownloaddec = new DefaultListModel();
                    while (true) 
                    {
                        for (Metadata metadata : resultdec.getEntries()) {
                            //adds the data to the model --> gets the file names
                            modelListFilesdownloaddec.addElement(metadata.getName());
                            //displays the data from the model into the JList
                            listFilesDownloadBtndeccloud.setModel(modelListFilesdownloaddec);                                
                        }                            
                        if (!resultdec.getHasMore()) {
                            break;                                
                        }
                        resultdec = client.files().listFolderContinue(resultdec.getCursor());                                  
                    }
               }
                catch (Exception e)
                {
                    JOptionPane.showMessageDialog(null, "Unable to load cloud files. \nError : " + e, "Cloud Error", JOptionPane.ERROR_MESSAGE);
                }                    
            }
            return null;                
        }
        @Override
        protected void done()
        {
            tLoadtask.cancel(true);                         
        }

        protected void process ()
        {

        }

    }

我将如何解决此问题。我已经阅读了多个不同的网页,这些网页基于swingworker和StackOverFlow上发布的问题,但是无法解决这个问题。也许我实现编码的方式存在问题,无法停止。

非常感谢先进的帮助

0 个答案:

没有答案