繁体   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