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