如何让我的程序等待特定线程并且不影响我的 GUI 的交互性?



我有一个基于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…?

不给你确切的解决方案,我可以给你一些考虑。您需要在GUI中做一些事情来指示用户应该等待。这可以是一个等待/繁忙游标,或者某种进度监视器。根据所使用的GUI技术,实现这些功能是不同的。当您对用户使用通知机制时,它将有一种在数据到达时唤醒的方法。

最新更新