2014-01-15 30 views
1

在我的IntelliJ Idea插件中,我无法在收到消息后从我的EchoSocket类(实现WebSocketListener)中访问PSI。如何访问IntelliJ IDEA中的PSI?

我总是得到这个错误:

读访问从事件调度线程允许或内部读操作只... 通过按下一个按钮,我可以没有任何问题访问。

回答

1

将访问权限包装到ApplicationManager.getApplication()。runReadAction(...)中。

请勿在此读取操作下执行任何长操作,因为它会延迟所有写入操作,并且在读取操作正在运行时无法键入编辑器。

+0

thx 4答案。它的工作原理,但现在有问题,我必须将每个访问包装到ApplicationManager.getApplication()。runReadAction(...)。例如,我希望收到消息后在编辑器中突出显示psiElement。有了你的解决方案,我必须将几乎所有东西都包装进去有时(例如,当我想访问选定的编辑器)它仍然显示错误,我必须再次包装它(我必须将它包装到包装中;))...有没有其他选择? – user2988098

+0

如果它不会太长,您可以在一次读取操作中包装一系列访问。 编辑器操作(例如添加突出显示)最好在Swing线程上完成,您可以使用Application.invokeLater。 通常,编辑器突出显示是通过突出显示通过执行的,例如,来自Annotator或检查。我强烈建议阅读http://confluence.jetbrains.com/display/IDEADEV/PluginDevelopment上的插件开发指南 –