我有一个基于 MVC 的程序,它从互联网获取数据并开始解析它,当然在网络程序中我们需要线程。
我有一个从互联网读取数据的类,如下所示:
public class WebReader extends Thread
{
private String result="";
public String getResult()
{
return result;
}
public void setResult(String t)
{
result = t;
}
public WebReader(get args here)
{
//initializing
}
public void getData()
{
//call the big getData(args);
}
public void getData(Sargs)
{
//magics happens here
}
@Override
public void run()
{
//call getData()
}
}
为了在我的模型中使用这个类,我一直在使用下面的代码:
//inside a function
WebReader wr = new WebReader(args);
wr.start();
wr.join();
String s = wr.getResult();
this.parseData(s);
我知道通过使用 join() 我将线程加入到当前线程,并且通过这样做我的 GUI 将卡住直到完整的结果来自网络。但我想确保 WebReader 类首先读取了数据,然后再继续我应该怎么做?
请您参考如下方法:
SwingWorker是一种内置机制,用于在后台线程上执行长时间运行的任务,因此 EDT 不会被阻塞。根据应用程序的总体设计和意图,您可能会发现它比某些替代解决方案更容易。
编辑:我假设您的 GUI 在 Swing 中...?否则,此答案将不适用。