我想通过定时器TIMER定时更新一个lable中的图片
但是,却一直更新不成功,如果在定时器中定时输出语句可以,但就是更换label中的图片不可以,希望哪位高手能给予解答,谢谢了
代码如下:
         timer=new Timer();
minutes=1;
timer.schedule(new TimerTask()
        {
     public void run()
             {
playSound();
     }
}, minutes * 5 * 1000,1000);        //playsound 方法如下

private void playSound() {
aa++;
System.out.println("aa="+aa);//定时输出这句话可以
if(aa>10)
{
    timer.cancel();
}
if(aa==1)
{
//但是定时让它自动更新cLabel,(cLabel 是Label的一个变量)中的图片却不行,即下面这句话一直报异常
                        cLabel.setImage(new Image(Display.getCurrent(), getClass().getResourceAsStream("/ftpclient/ct0.ico")));
}
}

解决方案 »

  1.   

    提示:
    1swt里面的组件只能是界面线程去访问,其他线程去访问就是不行的。
    2用Display.getDefault().asyncExec(new Runnable(){在这里写操作界面的代码});的方式就可以使运行界面线程了
    3你的new TimerTask()是另外新建的线程,不是界面线程综上,你的代码[cLabel.setImage(new Image(Display.getCurrent(), getClass().getResourceAsStream("/ftpclient/ct0.ico")));]应该写在[2]提示的那里面,用Display.getDefault().asyncExec(...)封装起来