(转)swt中调用awt的死锁问题

来源:互联网 发布:cfa 二级 知乎 编辑:程序博客网 时间:2024/05/17 04:45

swt中调用awt的死锁问题

swt中调用awt/swing组件时出现了程序没有响应,最后发现原来是在操作时我点击的是swt中的一个Button,然后在这个ButtonListener里执行的是更新awt/swing组件的操作,由于没有把更新awt/swing组件的操作放到Event-Dispatching Thread 线程中去,而awt/swing组件的事件(Event Listener中的事件)处理和绘制都必须由Event-Dispatching Thread线程调用。因此导致了线程的死锁,解决方法就是用SwingUtilitiesinvokeLater方法将更新awt/swing组件的代码显示地加Event-Dispatching Thread线程中。

//swing组件的方法

 

publicvoid setDocumentText(String sText)

{           

   final String s =sText;           

   javax.swing.SwingUtilities.invokeLater(newRunnable()            

   {                   

       public voidrun()                    

       {                           

           jText.setText(s);                   

       }           

   }); 

}

Btn.addSelectionListener(newSelectionAdapter()

{

  @Override

  public void widgetSelected(SelectionEvent e)

  {

      swing.setDocumentText(sText) 

  });

}

这样就ok

 

附:这篇文章很好,帮我解决了一直长期困扰的问题。

我的邮箱: liuliu541 (at) 163.com,欢迎交流!

 

0 0
原创粉丝点击