簡體   English   中英

Java中的SwingWorker(初學者問題)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM