RCP中的org.eclipse.swt.SWTException: Invalid thread access 问题

本文详细解释了在Eclipse RCP框架中遇到的org.eclipse.swt.SWTException: Invalid thread access错误的原因及解决办法。指出UI组件仅能由UI线程进行更新,并提供了使用Display.getDefault().asyncExec()将后台线程中的UI更新操作转交给UI线程处理的具体示例。

问题: 运行时错误 org.eclipse.swt.SWTException: Invalid thread access

原因: 产生的原因是RCP框架下,UI组件只能由UI线程来更新,禁止后台线程访问.,如 Timer 所触发的事件的处理代码; 用Job创建的分线程等. 由UI组件事情说触发的都是UI线程.

方法:只要把后台线程中涉及界面更新的代码交由UI线程处理即可.可以调用 Display.getDefault().asyncExec()来实现.

 

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

			@Override
			public void run() {
				//你的UI更新.
			}
		});


 

分析下面的报错 !ENTRY org.eclipse.ui.console 4 2 2025-08-27 18:44:27.458 !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.ui.console". !STACK 0 org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.swt.SWT.error(SWT.java:4397) at org.eclipse.swt.SWT.error(SWT.java:4312) at org.eclipse.swt.SWT.error(SWT.java:4283) at org.eclipse.swt.widgets.Widget.error(Widget.java:472) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:363) at org.eclipse.swt.widgets.Control.redraw(Control.java:2347) at org.eclipse.swt.custom.StyledText.redraw(StyledText.java:7354) at org.eclipse.ui.console.TextConsolePage.propertyChange(TextConsolePage.java:252) at org.eclipse.ui.console.AbstractConsole$PropertyNotifier.run(AbstractConsole.java:104) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.console.AbstractConsole$PropertyNotifier.notify(AbstractConsole.java:120) at org.eclipse.ui.console.AbstractConsole.firePropertyChange(AbstractConsole.java:246) at org.eclipse.ui.console.IOConsoleOutputStream.setColor(IOConsoleOutputStream.java:140) at tibon.TibrvSend.<init>(TibrvSend.java:318) at tibon.TibrvSend.<init>(TibrvSend.java:326) at tibon.TibrvSend.send(TibrvSend.java:265) at tibon.TibrvSend.send(TibrvSend.java:281) at tibon.actions.SendDelegate$Sender.run(SendDelegate.java:139) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) !ENTRY org.eclipse.ui.console 4 120 2025-08-27 18:44:27.459 !MESSAGE Exception occurred during console property change notification. !STACK 0 org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.swt.SWT.error(SWT.java:4397) at org.eclipse.swt.SWT.error(SWT.java:4312) at org.eclipse.swt.SWT.error(SWT.java:4283) at org.eclipse.swt.widgets.Widget.error(Widget.java:472) at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:363) at org.eclipse.swt.widgets.Control.redraw(Control.java:2347) at org.eclipse.swt.custom.StyledText.redraw(StyledText.java:7354) at org.eclipse.ui.console.TextConsolePage.propertyChange(TextConsolePage.java:252) at org.eclipse.ui.console.AbstractConsole$PropertyNotifier.run(AbstractConsole.java:104) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.console.AbstractConsole$PropertyNotifier.notify(AbstractConsole.java:120) at org.eclipse.ui.console.AbstractConsole.firePropertyChange(AbstractConsole.java:246) at org.eclipse.ui.console.IOConsoleOutputStream.setColor(IOConsoleOutputStream.java:140) at tibon.TibrvSend.<init>(TibrvSend.java:318) at tibon.TibrvSend.<init>(TibrvSend.java:326) at tibon.TibrvSend.send(TibrvSend.java:265) at tibon.TibrvSend.send(TibrvSend.java:281) at tibon.actions.SendDelegate$Sender.run(SendDelegate.java:139) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
最新发布
08-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值