我有一個JList,它顯示了Dropbox帳戶(Dropbox API v2)中的文件列表。如何停止SwingWorker一次dropbox列表文件顯示在JList中?
這些文件的清單使用了迴轉工,但是,一旦任務完成,我可以自動停止或取消迴轉工。
我試過 - >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上發佈的問題的多個不同的網頁,但僅僅解決不了這個問題。也許我實施編碼的方式存在問題,它無法阻止。
非常感謝您的幫助
我真的很感謝你的幫助。感謝您澄清我已經運行的問題。您提出的解決方案解決了問題。再次感謝:) :) :) – John
感謝您以前的幫助。不過,我一直在遇到列表加載的問題。有時候,雲端的文件列表會立即被加載,而其他時間我需要點擊一個按鈕3或4次,然後列表纔會顯示。你能幫我解釋爲什麼會發生這種情況嗎?此外,當我需要點擊按鈕3或4次,然後我得到一個異常拋出是「java.lang.ArrayIndexOutOfBoundsException:8」。我怎樣才能解決這個問題。非常感謝您的幫助。 – John
最好是打開另一個問題(你可以鏈接到這個問題作爲參考),在這個問題中你描述了問題所在,並添加堆棧跟蹤和當前代碼。所以其他人也可能會提供幫助。 – Fildor