首页 > 解决方案 > 我应该如何运行同时更新 intellij 设置插件中的 UI 的后台任务

问题描述

我正在向与vault集成的 intelij 插件添加一些更改我有实现 Configurable 的设置页面,该页面具有凭据表单,然后是“测试登录”按钮。单击按钮时,我想生成一个异步后台任务来测试凭据,然后以成功或失败更新 UI。

这是我的设置截图 在此处输入图像描述

据我所知,正确的方法是使用后台任务,但这需要一个“项目”,据我所知,你必须从AnAction中获得,我真的不明白这会如何在这种情况下工作。这是我玩过的一些方法

这仍然会阻止 UI 并发出关于 UI 被阻止太久的警告

ApplicationManager.getApplication().executeOnPooledThread(() -> 
  ApplicationManager.getApplication().invokeLaterOnWriteThread(() -> {
                // async work
                // repaint
            }, ModalityState.stateForComponent(myMainPanel)));
// I don't know how to get the project or if I even should here.
ProgressManager.getInstance().run(new Task.Backgroundable(project, "Login"){
    public void run(@NotNull ProgressIndicator progressIndicator) {
         // async work
         // repaint when done
    }});

所有这一切都发生在我的 AppSettingsComponent 按钮单击 addActionListener 中。这是我在github上的完整源代码

标签: intellij-ideaintellij-plugin

解决方案


我对所需的项目实例有同样的问题。但是通过查看 Task.Backgroundable 构造函数,您可以传递一个 @Nullable 项目。所以我只是通过 null ,它对我很有效。

ProgressManager.getInstance().run(new Task.Backgroundable(null, "Login") {
    public void run(@NotNull ProgressIndicator progressIndicator) {
         // your stuff
    }
});

推荐阅读