SWT Failed to execute runnable 线程错误问题

wudeaaa 2010-05-06 03:58:03
使用SWT开发时,有时候出抛出异常

org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.swt.SWTException: Widget is disposed)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Unknown Source)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
...
Caused by: org.eclipse.swt.SWTException: Widget is disposed
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Widget.error(Unknown Source)
at org.eclipse.swt.widgets.Widget.getDisplay(Unknown Source)
at org.eclipse.jface.window.DefaultToolTip.getForegroundColor(DefaultToolTip.java:159)
at org.eclipse.jface.window.DefaultToolTip.createToolTipContentArea(DefaultToolTip.java:92)
at org.eclipse.jface.window.ToolTip.toolTipShow(ToolTip.java:332)
at org.eclipse.jface.window.ToolTip.access$4(ToolTip.java:329)
at org.eclipse.jface.window.ToolTip$2.run(ToolTip.java:429)
at org.eclipse.swt.widgets.Display.runTimer(Unknown Source)
at org.eclipse.swt.widgets.Display.messageProc(Unknown Source)
at org.eclipse.swt.internal.win32.OS.MessageBoxW(Native Method)
at org.eclipse.swt.internal.win32.OS.MessageBox(Unknown Source)
at org.eclipse.swt.widgets.MessageBox.open(Unknown Source)
at com.my.test.aaa(Test.java 1000)
at com.my.test.bbb.run(UITest.java:379)
at org.eclipse.swt.widgets.RunnableLock.run(Unknown Source)
... 6 more


具体情况是:在界面上做某个操作,然后MessageBox返回消息,就会出现这种情况
比如:

public class UITest implements Runnable {

public run(){
new Thread() {
public void run() {
Display.getDefault().syncExec(new Runnable() {

public void run() {
//执行aaa方法
}

});

}.start();
}
}
}

Test类

public class Test{
public void aaa(){
//执行某个事件
MessageBox msg = essageBox mb = new MessageBox(shell, SWT.ICON_INFORMATION | SWT.YES);
msg.setText("aa");
msg.setMessage("aaaaa");
msg.open();//选择“是”,就会抛出异样
}
public static void main(String args[]){
///
}
}

这个问题在网上搜了,还没找到解决的办法,期待高手。
...全文
1672 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuhuanleijava 2011-09-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 baiydn 的回复:]
你在run方法里用到了哪个控件,你就先判断这个控件是不是已经销毁

if (!msg.isDisposed()) {
msg.setText("");
................
}
[/Quote]
问题差不多就是这样。销毁后,你又操作空间 就会报这个异常
SZ深呼吸 2010-05-29
  • 打赏
  • 举报
回复
你在run方法里用到了哪个控件,你就先判断这个控件是不是已经销毁

if (!msg.isDisposed()) {
msg.setText("");
................
}
wudeaaa 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kuwuff 的回复:]
方法调用错误啊
[/Quote]哪里错误呢?
wudeaaa 2010-05-07
  • 打赏
  • 举报
回复
顶一下
酷舞纷飞 2010-05-07
  • 打赏
  • 举报
回复
方法调用错误啊
霜之哀伤 2010-05-06
  • 打赏
  • 举报
回复
这个错误是因为界面控件已经关闭了,你还在操作控件,例如调用控件的setText()方法等...
  • 打赏
  • 举报
回复
你可以换一下啊


public class Test{
public void aaa(){

Display.getDefault().syncExec(new Runnable() {

public void run() {
//执行某个事件
MessageBox msg = essageBox mb = new MessageBox(shell, SWT.ICON_INFORMATION |SWT.YES);
msg.setText("aa");
msg.setMessage("aaaaa");
msg.open();//选择“是”,就会抛出异样 }

});
}
public static void main(String args[]){
///
}
}



GreenVesture 2010-05-06
  • 打赏
  • 举报
回复
问题应该是你操作了已经dispose掉的组件,不过你的代码没贴完整,无法指出具体哪里有问题,看异常信息的这三句吧:
Caused by: org.eclipse.swt.SWTException: Widget is disposed
at com.my.test.aaa(Test.java 1000)
at com.my.test.bbb.run(UITest.java:379)

如果还是找不到原因建议贴上完整的代码吧.....
wudeaaa 2010-05-06
  • 打赏
  • 举报
回复
swt 是3.3版

58,452

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧