Java:无效的线程访问-弹出菜单

时间:2018-11-07 04:37:38

标签: java eclipse swt

在一个eclipse插件中,我试图创建一个在编辑器中激活的弹出窗口,并根据在弹出窗口中选择的内容将语法添加到字符串中。我有一个扩展AbstractTextEditor的编辑器类,在其中我试图使用键侦听器弹出一个包含字符串操作函数列表的窗口,然后当选择列表中的某个项目时,我想用从弹出窗口中的方法返回的新字符串。当我尝试执行此操作(使用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)       在org.eclipse.swt.custom.StyledText.getSelectionRange(StyledText.java:4743)       在githubflavoredmarkdowneclipseplugin.MarkdownEditor.test(MarkdownEditor.java:140)       在autocomplete.AutoComplete $ 1.keyPressed(AutoComplete.java:50)       在java.awt.AWTEventMulticaster.keyPressed(未知来源)       在java.awt.Component.processKeyEvent(未知来源)       在javax.swing.JComponent.processKeyEvent处(未知源)       在java.awt.Component.processEvent(未知来源)       在java.awt.Container.processEvent(未知来源)       在java.awt.Component.dispatchEventImpl(未知来源)       在java.awt.Container.dispatchEventImpl(未知来源)       在java.awt.Component.dispatchEvent(未知来源)       在java.awt.KeyboardFocusManager.redispatchEvent(未知来源)       在java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(未知来源)       在java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(未知   资源)       在java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(未知   资源)       在java.awt.DefaultKeyboardFocusManager.dispatchEvent(未知来源)       在java.awt.Component.dispatchEventImpl(未知来源)       在java.awt.Container.dispatchEventImpl(未知来源)       在java.awt.Window.dispatchEventImpl(未知源)       在java.awt.Component.dispatchEvent(未知来源)       在java.awt.EventQueue.dispatchEventImpl(未知来源)       在java.awt.EventQueue.access $ 500(未知源)       在java.awt.EventQueue $ 3.run(未知源)       在java.awt.EventQueue $ 3.run(未知源)       在java.security.AccessController.doPrivileged(本机方法)       在java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(未知   资源)       在java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(未知   资源)       在java.awt.EventQueue $ 4.run(未知源)       在java.awt.EventQueue $ 4.run(未知源)       在java.security.AccessController.doPrivileged(本机方法)       在java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(未知   资源)       在java.awt.EventQueue.dispatchEvent(未知来源)       在java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源)       在java.awt.EventDispatchThread.pumpEventsForFilter(未知来源)       在java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源)       在java.awt.EventDispatchThread.pumpEvents(未知来源)       在java.awt.EventDispatchThread.pumpEvents(未知来源)       在java.awt.EventDispatchThread.run(未知来源)

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

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

1 个答案:

答案 0 :(得分:0)

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