首页 > 解决方案 > Java:无效的线程访问 - 弹出菜单

问题描述

在 Eclipse 插件中,我试图创建一个弹出窗口,该窗口在编辑器中激活,并根据在弹出窗口中选择的选项将语法添加到字符串中。I have an editor class that extends AbstractTextEditor and within it I am trying to use a keylistener to pop up a window that contains a list of string manipulation functions and then when an item in the list is selected I want to replace some selected content with the从弹出窗口中的方法返回的新字符串。当我尝试执行此操作时(使用 2 个链接文件中的代码),我收到以下错误:

线程“AWT-EventQueue-0”org.eclipse.swt.SWTException 中的异常:org.eclipse.swt.SWT.error(SWT.java:4595) 在 org.eclipse.swt.SWT.error(SWT) 处的线程访问无效.java:4510) 在 org.eclipse.swt.SWT.error(SWT.java:4481) 在 org.eclipse.swt.widgets.Widget.error(Widget.java:451) 在 org.eclipse.swt.widgets。 Widget.checkWidget(Widget.java:369) at org.eclipse.swt.custom.StyledText.getSelectionRange(StyledText.java:4743) at githubflavoredmarkdowneclipseplugin.MarkdownEditor.test(MarkdownEditor.java:140) at autocomplete.AutoComplete$1.keyPressed( AutoComplete.java:50) 在 java.awt.AWTEventMulticaster.keyPressed(Unknown Source) 在 java.awt.Component.processKeyEvent(Unknown Source) 在 javax.swing.JComponent.processKeyEvent(Unknown Source) 在 java.awt.Component。processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent( Unknown Source) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source) at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source) ) 在 java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) 在 java.awt.Component.dispatchEventImpl(Unknown Source) 在 java.awt.Container.dispatchEventImpl(Unknown Source) 在 java.awt.Window.dispatchEventImpl(Unknown Source) 在爪哇。awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java. awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)在 java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown来源)在 java.awt.EventQueue。dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(未知源)在 java.awt.EventDispatchThread.pumpEvents(未知源)在 java.awt.EventDispatchThread.run(未知源)运行(未知来源)运行(未知来源)

似乎当自动更新类试图通知编辑器类已选择更改时,它无法操作 styledText 变量。有谁知道如何解决这一问题?

可以通过以下链接查看包含此代码的两个文件: http ://www.filedropper.com/markdowneditor http://www.filedropper.com/autocomplete

标签: javaeclipseswt

解决方案


您收到该异常的原因是,当您进行与 SWT 相关的 UI 更改时,您必须执行一个可运行的 vis Display.syncExec(myRunable) 否则会发生该异常。


推荐阅读