我有一个基于 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 中...?否则,此答案将不适用。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!