繁体   English   中英

如何使我的程序等待特定的线程,又不影响GUI的交互性?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM