[英]SwingWorker in Java (beginner question)
我對多線程相對較新,並且想要使用Swingworker線程執行后台任務 - 被調用的方法實際上不會返回任何內容,但我希望在完成后得到通知。
從我在網上看到的關於使用SwingWorkers的所有教程都是如此創建的
new SwingWorker<String, Void>;
將我的聲明聲明為Void,Void是否合適,因為沒有數據被返回?
到目前為止我的代碼似乎沒有工作:
private void crawl(ActionEvent evt)
{
try
{
SwingWorker<Void, Void> crawler = new SwingWorker<Void, Void>()
{
@Override
protected Void doInBackground() throws Exception
{
Discoverer discover = new Discoverer();
discover.crawl();
return null;
}
@Override
protected void done()
{
JOptionPane.showMessageDialog(jfThis, "Finished Crawling", "Success", JOptionPane.INFORMATION_MESSAGE);
}
};
crawler.execute();
}
catch (Exception ex)
{
JOptionPane.showMessageDialog(this, ex.getMessage(), "Exception", JOptionPane.ERROR_MESSAGE);
}
}
任何反饋/建議都將受到高度贊賞,因為多線程是我很弱的編程領域。
代碼似乎沒問題......應該可行。 也許爬行方法永遠不會完成......如果您調試代碼並使其運行直到返回null的行並查看爬網方法是否完成,會發生什么?
我建議監控爬行方法的狀態(它是否完成?)以及將其包裝在doInBackground中的try {...} catch塊中。 或者從你的done方法中調用“get()”。 無論哪種方式都應該允許您捕獲在爬網過程中拋出的任何異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.