2014-01-15 31 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上的插件開發指南 –