gpt4 book ai didi

java - 你怎么能在这里得到 "SWTException: Invalid thread access"?

转载 作者:行者123 更新时间:2023-11-29 10:04:42 24 4
gpt4 key购买 nike

我正在 plugin.xml 中注册一个生命周期监听器。如果我只定义一个 Shell 它运行正常。
例如

@PostContextCreate  
void postContextCreate(final IEventBroker eventBroker){
System.out.println("CALLED!");
final Shell shell = new Shell(SWT.TOOL | SWT.NO_TRIM);
shell.open();
eventBroker.subscribe(UIEvents.UILifeCycle.ACTIVATE, new EventHandler() {

@Override
public void handleEvent(Event event) {
System.out.println("Closing shell");
shell.close();
shell.dispose();
System.out.println("Closed");
eventBroker.unsubscribe(this);
}
});

但是如果我将调用更改为也使用 Display:

@PostContextCreate
void postContextCreate(final IEventBroker eventBroker){
System.out.println("CALLED!");
Display display = new Display();
final Shell shell = createSplashShell(display);
shell.open();
while (!shell.isDisposed ()) {
if (!display .readAndDispatch ()) display.sleep ();
}
display.dispose ();
//etc

我得到以下异常:

org.eclipse.e4.core.di.InjectionException: org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:63) at
org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:229) at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:206) at

我知道这个异常与 UI 线程有关,但我无法弄清楚使用 Display 是如何导致这个异常的。
有帮助吗?

最佳答案

使用 Display.asyncExec在 UI 线程上执行 Runnable 的方法。

与大多数 UI 框架一样,SWT 不允许任何线程对 UI 组件进行操作,因此当您需要从另一个线程更改某些内容时,您必须将其交给在 UI 线程上执行它的实用程序。

关于java - 你怎么能在这里得到 "SWTException: Invalid thread access"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12499763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com