gpt4 book ai didi

java - 在 UI 线程中注册 Saveable 时出现 ClassCastException

转载 作者:行者123 更新时间:2023-12-02 05:37:52 24 4
gpt4 key购买 nike

documentation ISaveablesLifecycleListener 表示,将 Saveable 添加到 ISaveablesSource 时,必须在 UI 线程上调用 handleLifecycleEvent

但是,当我这样做时:

PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
externalSaveable = saveable;
ISaveablesLifecycleListener lifecycleListener = (ISaveablesLifecycleListener)getSite().getService(ISaveablesLifecycleListener.class);
lifecycleListener.handleLifecycleEvent(
new SaveablesLifecycleEvent(this, SaveablesLifecycleEvent.POST_OPEN, new Saveable[] {saveableToRegister}, false));
}
});

我收到以下异常:

org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.ClassCastException: abstractTextEditor.editor.AbstractTextEditor$2 cannot be cast to org.eclipse.ui.ISaveablesSource)
at org.eclipse.swt.SWT.error(SWT.java:4397)
at org.eclipse.swt.SWT.error(SWT.java:4312)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:138)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4145)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3762)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:140)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:611)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
Caused by: java.lang.ClassCastException: abstractTextEditor.editor.AbstractTextEditor$2 cannot be cast to org.eclipse.ui.ISaveablesSource
at org.eclipse.ui.internal.SaveablesList.handleLifecycleEvent(SaveablesList.java:215)
at abstractTextEditor.editor.AbstractTextEditor$2.run(AbstractTextEditor.java:865)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
... 24 more

(其中 AbstractTextEditor 不是 eclipse AbstractTextEditor,而是我自己的继承自 TextEditor 的编辑器)。

从当前线程调用handleLifecycleEvent时,我没有收到此异常。我做错了什么?

最佳答案

如果您仔细查看ClassCastException,它会显示AbstractTextEditor$2 - 请注意末尾的$2

您尝试在此处使用匿名 Runnable 类作为 ISaveablesSource:

new SaveablesLifecycleEvent(this, SaveablesLifecycleEvent.POST_OPEN, new Saveable[] {saveableToRegister}, false));

thisRunnable。您需要使用 AbstractTextEditor.this 传入编辑器:

new SaveablesLifecycleEvent(AbstractTextEditor.this, SaveablesLifecycleEvent.POST_OPEN, new Saveable[] {saveableToRegister}, false));

您确定需要使用asyncExec吗?文本编辑器的大多数方法已经在用户线程中运行。

关于java - 在 UI 线程中注册 Saveable 时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24810236/

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