15

私は IntelliJ-idea プラグインを開発しており、バックグラウンド タスクでコードを実行したいと考えています (バックグラウンド タスク ダイアログと UI 以外の別のスレッドで表示されます)。

次のヘルパー クラスを見つけて、Runnable オブジェクトを渡してその run メソッドを実装してみましたが、それでも UI がブロックされ、自分でスレッドを実行しようとすると、次のエラーが発生しました。

 Read access is allowed from event dispatch thread or inside read-action only (see com.intellij.openapi.application.Application.runReadAction())
     Details: Current thread: Thread[Thread-69 [WriteAccessToken],6,Idea Thread Group] 532224832
     Our dispatch thread:Thread[AWT-EventQueue-1 12.1.4#IU-129.713, eap:false,6,Idea Thread Group] 324031064
     SystemEventQueueThread: Thread[AWT-EventQueue-1 12.1.4#IU-129.713, eap:false,6,Idea Thread Group] 324031064
4

4 に答える 4

11

これが一般的な解決策です

ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
    public void run() {
        ApplicationManager.getApplication().runReadAction(new Runnable() {
            public void run() {
            // do whatever you need to do
            }
        });
    }
});
于 2013-09-12T16:03:06.790 に答える
1

kotlin でバックグラウンド可能なタスクを実行する新しい方法

import com.intellij.openapi.progress.runBackgroundableTask

runBackgroundableTask("My Backgrund Task", project) {
    for (i in 0..10 step 1) {
        it.checkCanceled()
        it.fraction = i / 10.0
        sleep(i * 100L)
    }
}
于 2021-03-26T09:35:06.450 に答える