intellij-idea - 我应该如何运行同时更新 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上的完整源代码
解决方案
我对所需的项目实例有同样的问题。但是通过查看 Task.Backgroundable 构造函数,您可以传递一个 @Nullable 项目。所以我只是通过 null ,它对我很有效。
ProgressManager.getInstance().run(new Task.Backgroundable(null, "Login") {
public void run(@NotNull ProgressIndicator progressIndicator) {
// your stuff
}
});
推荐阅读
- java - Javaparser - 如果发生条件,如何读取方法
- javascript - node.js中flutter而不是Buffer的等效函数或类型是什么
- r - 如何检查两个随机选择的响应是否匹配?
- laravel - 带有刀片组件和 alpine.js 的切换按钮
- prolog - 如何在两个列表中找到共同的元素?序言
- powerbi - USERELATIONSHIP 函数只能使用参与关系的两列引用
- java - 如何使用 Searchview 搜索 ButtonText?
- excel - 如何根据单元格值循环?
- google-apps-script - 谷歌表格脚本,无法删除表单目标
- php - VB.Net 加密函数到 PHP