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

标签 java multithreading

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

关于java - 如何让我的程序等待特定线程并且不影响我的 GUI 的交互性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8695307/

相关文章:

java - 配置 Hibernate 以适应现有的数据库约束?

java - 表示可以放大和缩小的 2D map /网格的良好数据结构?

java - jssc getInputStream() getOutputstream()

java - 为什么这段代码抛出 java.lang.StackOverflowError

c++ - Qt 崩溃中工作线程的删除和清理

多线程和 gtk2hs

multithreading - Perl 线程中的 join 会阻止 SIGALRM 吗?

java - 如何更改 Sliding TabLayout 的文字颜色?

c++ - 释放锁时的线程调度

windows - 为什么将多线程应用程序限制在一个核心使其运行得更快?