0

我正在使用Display.getDefault().asyncExec(). 该线程执行以下操作:

public void run()
{
    while (! condition)
    {
      //do some processing
      mainWindow.updateStatus(..); //this will call a setText method on a label in 
                    //the original thread
    }
}

但是,当我运行这个线程时,程序挂起而不是在标签中顺利显示状态。我究竟做错了什么?

4

2 回答 2

4

您误解了线程的概念。您所谓的线程实际上只是您计划在(UI)线程上执行的一段代码。

通常,UI 线程上的代码应该快速执行并尽快返回。您的 while 循环很可能违反了此规则。解决方案是从 UI 线程(即 run 方法)中取出循环并将其放在Display.asyncExec()调用周围。

于 2013-09-27T07:59:28.863 回答
3

扩展一下 Käärik 的答案:您的代码应如下所示

public class MyTask implements Runnable {
    public void run()
    {
        while (! condition)
        {
            //do some processing without touching the screen
            Display.getDefault().asyncExec(new Runnable() {
                public void run() {
                    mainWindow.updateStatus(..);
                }
            });
        }
    }
}

然后你运行它,new Thread(new MyTask())或者例如将它安排在一个线程池上,每 10 秒重复一次。

于 2013-09-27T12:47:00.463 回答