[英]how to make my program to wait for a particular thread and also not affecting my GUI's interactivity?
我有一个基于MVC的程序,该程序从Internet获取数据并开始解析它,当然在网络程序中我们需要有线程。
我有一堂课,用于从互联网读取数据,如下所示:
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中...? 如果不是,此答案将不适用。
在没有给您确切解决方案的情况下,我可以考虑一些事项。 您将需要在GUI中执行某些操作以指示用户应等待。 它可能只有等待/忙碌光标或某种进度监视器。 根据所使用的GUI技术,实现这些方法的方法有所不同。 当您向用户使用通知机制时,它将有一种在数据到达时唤醒的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.