swt中调用awt的死锁问题
在swt中调用awt/swing组件时出现了程序没有响应,最后发现原来是在操作时我点击的是swt中的一个Button,然后在这个Button的Listener里执行的是更新awt/swing组件的操作,由于没有把更新awt/swing组件的操作放到Event-Dispatching Thread 线程中去,而awt/swing组件的事件(Event Listener 中的事件)处理和绘制都必须由Event-Dispatching Thread 线程调用。因此导致了线程的死锁,解决方法就是用SwingUtilities的invokeLater方法将更新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, 欢迎交流!