java - 是否可以中断由 ApplicationManager.getApplication().executeOnPooledThread 调用的可运行对象?
问题描述
我目前正在开发一个嵌入 JCEF 以进行前端交互的 IDEA 扩展。一旦用户点击一个按钮,就会执行onQuery
in 实现的方法,MessageRouterHandler
并执行一项耗时的任务。
耗时的任务在一个方法中实现(在主线程以外的线程上异步,以防 UI 被冻结),并以类似的形式包装
private void task(CefBrowser browser, CefQueryCallback callback) {
ApplicationManager.getApplication().executeOnPooledThread(() -> {
...DETAILED IMPLEMENTATION FOR THE TASK...
});
}
runnable只包含文件读取相关的操作(用户点击JCEF webview上的另一个按钮选择),与IDE接口无关,这里我没有添加runWriteAction
or runReadAction
。
由于任务可能需要更长的时间,我想为用户的取消订单添加一个按钮。但是,我对扩展开发很陌生,谁能帮我弄清楚如何实现取消功能?非常感谢您的任何建议。
解决方案
一项耗时的任务应在进度指示器下执行,请参阅com.intellij.openapi.progress.ProgressManager
。在任务期间,您可以调用com.intellij.openapi.progress.ProgressManager#checkCanceled
以查看任务是否已被用户取消。这个调用应该很便宜,所以你可以经常调用它来确保你的进程及时响应用户的取消请求。
推荐阅读
- python - Fabric2 中的环境变量
- python - ConvergenceWarning: Liblinear 收敛失败,增加迭代次数
- python - 使用 if __name__ == "__main__" 时出现问题:在 Python 中
- jquery - jquery替换一个标签中的文本
- javascript - 如何获取已存储的对象及其所有子字段?
- javascript - 更改对象的 __proto__ 的值是否被认为是不好的做法?
- php - Gmail API CC 很多人,但在底部添加了不同的像素跟踪器
- python - 如何使用来自 ftplib 的 FTP 在 python 中获取 ftp 文件 [以 epoc 毫秒格式] 的最后修改时间?
- c# - 收到错误“不支持指定的方法”。在 c# 中的 bitmap.save 上。验证码 5
- swift - 如何存储多个 Swift 文件的列表并独立执行它们