是这样的
窗体上有一个Text和一个按扭。
点击按扭后开启一个线程
在线程中每隔一段时间处理一些事务,并把处理的结果不断显示到窗体中的Text中。
我知道Text中有insert(String s)方法可以向Text中追加字符串。可是当我在run()
{
....
text.insert("第一次处理")
....
}出现错误。
我也用了其他各种办法,就是搞不定,大家帮帮忙看看怎么才好。

解决方案 »

  1.   

    线程问题   在任何操作平台的GUI系统中,对构件或一些图形API的访问操作都要被严格同步并串行化。例如,在一个图形界面中的按键构件可被设成可用状态(enable)或禁用状态(disable),正常的处理方式是,用户对按键状态设置操作都要被放入到GUI系统的事件处理队列中(这意味着访问操作被串行化),然后依次处理(这意味着访问操作被同步)。想象当按键可用状态的设置函数还没有执行结束的时候,程序就希望再设置该按键为禁用状态,势必会引起冲突。实际上,这种操作在任何GUI系统都会触发异常。   Java语言本身就提供了多线程机制,这种机制对GUI编程来说是不利的,它不能保证图形构件操作的同步与串行化。SWT采用了一种简单而直接的方式去适应本地GUI系统对线程的要求:在SWT中,通常存在一个被称为"用户线程"的唯一线程,只有在这个线程中才能调用对构件或某些图形API的访问操作。如果在非用户线程中程序直接调用这些访问操作,那么SWTExcepiton异常会被抛出。但是SWT也在*.widget.Display类中提供了两个方法可以间接的在非用户线程的进行图形构件的访问操作,这是通过的syncExec(Runnable)和asyncExec(Runnable)这两个方法去实现的。例如: //此时程序运行在一个非用户线程中,并且希望在构件panel上加入一个按键。Display.getCurrent().asyncExec(new Runnable() {
     public void run() {
      Button butt = new Button(panel,SWT.PUSH);
      butt.setText("Push");
     }
    });   方法syncExec()和asyncExec()的区别在于前者要在指定的线程执行结束后才返回,而后者则无论指定的线程是否执行都会立即返回到当前线程。
      

  2.   

    How do u solve it? I met the same problem and I am a newer for Eclipse.
    Can I get ur source code about this problem or some guide info?
    Thank u very much! [email protected]