等待取消的未来真正完成

2023-11-25

我有一个SwingWorker它调用一些不检查线程中断的代码。拨打电话后worker.cancel(true), the worker.get()方法会抛出CancellationException立即(正如预期的那样)。但是,由于后台任务的代码从不检查其线程是否被中断,因此它会愉快地继续执行。

是否有等待后台任务的标准方法actually结束?我希望显示“正在取消...”消息或类似的消息并阻止,直到任务终止。 (我确信如果有必要,我总是可以在工人类中使用标志来完成此任务,只需寻找任何其他解决方案。)


我对此进行了一些尝试,这就是我的想法。我正在使用一个CountDownLatch并基本上暴露了它的await()方法作为我的方法SwingWorker目的。仍在寻找更好的解决方案。

final class Worker extends SwingWorker<Void, Void> {

    private final CountDownLatch actuallyFinishedLatch = new CountDownLatch(1);

    @Override
    protected Void doInBackground() throws Exception {
        try {
            System.out.println("Long Task Started");

            /* Simulate long running method */
            for (int i = 0; i < 1000000000; i++) {
                double d = Math.sqrt(i);
            }

            return null;
        } finally {
            actuallyFinishedLatch.countDown();
        }
    }

    public void awaitActualCompletion() throws InterruptedException {
        actuallyFinishedLatch.await();
    }

    public static void main(String[] args) {
        Worker worker = new Worker();
        worker.execute();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {

        }

        System.out.println("Cancelling");
        worker.cancel(true);

        try {
            worker.get();
        } catch (CancellationException e) {
            System.out.println("CancellationException properly thrown");
        } catch (InterruptedException e) {

        } catch (ExecutionException e) {

        }

        System.out.println("Awaiting Actual Completion");
        try {
            worker.awaitActualCompletion();
            System.out.println("Done");
        } catch (InterruptedException e) {

        }
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

等待取消的未来真正完成 的相关文章

  • Java中字符串中特殊字符的替换

    Java中如何替换字符串 E g String a adf sdf 如何替换和避免特殊字符 您可以删除除此之外的所有字符可打印的 ASCII 范围 http en wikipedia org wiki ASCII ASCII printab
  • Eclipse 在源代码管理中保存操作

    我们希望找到一种在签入之前执行代码标准的 轻量级 方法 我们真的很喜欢使用 Eclipse 内置的想法保存操作 go to Preferences gt gt Java gt gt Editor gt gt Save Actions 其中有
  • 在文本文件中写入多行(java)

    下面的代码是运行命令cmd并使用命令行的输出生成一个文本文件 下面的代码在 Eclipse 的输出窗口中显示了正确的信息 但在文本文件中只打印了最后一行 谁能帮我这个 import java io public class TextFile
  • 如何创建一个显示 Spinners 的 x 和 y 值的表格?

    我想创建一个位于图表右侧的表格 其中显示 2 列 x 和 y 值已输入到xSpin and ySpin旋转器 我已经画了一张我想要桌子放置的位置的图 我尝试过在网格窗格布局中使用文本框来创建表格并将值直接输入到文本框网格中 但是我无法将它们
  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • 当从服务类中调用时,Spring @Transactional 不适用于带注释的方法

    在下面的代码中 当方法内部 是从内部调用的方法外部 应该在交易范围内 但事实并非如此 但当方法内部 直接从调用我的控制器class 它受到事务的约束 有什么解释吗 这是控制器类 Controller public class MyContr
  • Hibernate.createBlob() 方法从 Hibernate 4.0.1 开始已弃用,并移至 Hibernate.getLobCreator(Session session).createBlob()

    Method Hibernate createBlob 已弃用自休眠4 0 1并搬到Hibernate getLobCreator Session session createBlob 任何解决方案我应该在方法内传递什么getLobCrea
  • 匿名类上的 NotSerializedException

    我有一个用于过滤项目的界面 public interface KeyValFilter extends Serializable public static final long serialVersionUID 7069537470113
  • 以编程方式在java的resources/source文件夹中创建文件?

    我有两个资源文件夹 src 这是我的 java 文件 资源 这是我的资源文件 图像 properties 组织在文件夹 包 中 有没有办法以编程方式在该资源文件夹中添加另一个 properties 文件 我尝试过这样的事情 public s
  • 在 Spring 中重构这个的最佳方法?

    private final ExecutorService executorParsers Executors newFixedThreadPool 10 public void parse List
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • 我可以创建自定义 java.* 包吗?

    我可以创建一个与预定义包同名的自己的包吗在Java中 比如java lang 如果是这样 结果会怎样 这难道不能让我访问该包的受保护的成员 如果不是 是什么阻止我这样做 No java lang被禁止 安全管理器不允许 自定义 类java
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • Java中的Object类是什么?

    什么是或什么类型private Object obj Object http download oracle com javase 6 docs api java lang Object html是Java继承层次结构中每个类的最终祖先 从
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 如何从 Maven 存储库引用本机 DLL?

    如果 JAR 附带 Maven 存储库中的本机 DLL 我需要在 pom xml 中放入什么才能将该 DLL 放入打包中 更具体地举个例子Jacob http search maven org artifactdetails 7Cnet s
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import
  • 如何在 JFreeChart 中设置多个系列的线条粗细?

    我创建了很多图表 在他们每个人中我都需要打电话 renderer setSeriesStroke i new BasicStroke 2 0f 对于每个系列 renderer is chart getXYPlot getRenderer 我

随机推荐

  • 如何在 Sublime Text 中向语法定义添加功能而不进行编辑?

    例如 我想强调 param type and return 即 epytext 声明 在我的 Python 文档字符串中 我已经想出了如何通过简单的编辑来做到这一点Python Python tmLanguage 但是 出于以下几个原因 我
  • 使用 willTransitionToState 在 uitableviewcell 中对文本标签进行动画处理

    当我按下编辑按钮时 我试图为 UItableviewcell 中的文本标签设置动画 我正在尝试让它淡出和淡入 淡入有效 但当我按 编辑 时 文本标签消失 当我按 完成 时 我完美地淡入 谁能告诉我为什么它不起作用 提前致谢 void wil
  • 以范围为键的字典

    在 Python 中 如何将一系列值映射到一个具体值 基本上 我想要一本字典 我可以用数字填充范围和索引 rd rangedict rd 0 10 5 print rd 4 prints 5 print rd 6 prints 5 rd 5
  • WordPress - 生成按标签和类别过滤的帖子列表

    我正在尝试创建一个页面上有六个列表的 WordPress 网站 每个列表显示来自不同类别的帖子 简单的 但是 如果用户选择一个标签 将他们带到该标签存档页面 我希望他们仍然看到六列表模板 但每个类别中的所有帖子也会按标签过滤 因此 帖子列表
  • 如何在根节点查找子节点[TreeView]

    ROOT A B C D E T F G X 我想找到E节点的父节点 它是5号 然后 我将保存节点 如果数字较小5 我在Asp net控件中使用TreeView 我建议使用递归迭代 private TreeNode FindNode Tre
  • R:stat_smooth 组(x 轴)

    我有一个Database 并想使用 stat smooth 显示图形 我可以显示 avg time 与 Scored Probabilities 的对比图 如下所示 c lt ggplot dataset1 aes x Avg time y
  • 如何更改 ggplot2 geom_raster 中的插值/平滑

    是否可以改变插值级别 例如平滑 模糊 geom raster library tidyverse mtcars gt group by carb hp cut mtcars hp 3 labels c low med hi gt summa
  • 调整多维向量的大小

    如何调整多维向量的大小 例如 vector
  • Spring Security - 无法避免缓存控制

    我有一个应用程序 并使用 spring 的控制器映射将图像加载给我的用户 输入流 响应等 在我的控制器中 我将标头设置为缓存控制 基于文件等 但所有请求中总是有 pragma no cache 和 Cache Control max age
  • 如何在 F# 中声明通用异常类型

    如何定义如下所示的异常 exception CustomExn lt TMessage gt of TMessage list 也许你可以直接继承System Exception type CustomExn lt TMessage gt
  • 按下蓝牙设备按钮应触发应用程序中的 Onclick 侦听器

    我正在尝试制作一个应用程序 当在配对的蓝牙设备上按下按钮时 该应用程序会触发应用程序中的单击侦听器 经过几个小时的谷歌搜索后 我认为我无法将蓝牙设备按钮的键码发送到广播接收器 如果键码匹配 那么我可以调用点击监听器 或者我的方法和理解可能是
  • wpf databind IsVisible to TabControl.SelectedItem != null

    我有一个StackPanel我想让它仅在以下情况下可见SomeTabControl SelectedItem null 如何在 WPF 绑定中执行此操作 您可以通过使用样式和触发器而无需转换器来完成此操作
  • 如何使用delphi以编程方式删除USB闪存盘?

    如何使用delphi以编程方式检测和删除USB闪存盘 我已经看过该网站上的一些示例 但它们缺乏关于如何进行操作的明确解释 请举例真的很有帮助 这是一个快速而肮脏的翻译这个示例代码要删除驱动器 请访问 support microsoft co
  • jQuery - 无法将事件绑定到动态元素?

    我来维护一段 javascript 它从服务器下载一些 JSON 数据 构建一个新的表行 例如 tr 然后 将事件绑定到它 如下所示 a click function yadda yadda return false 唯一的问题是这似乎不起
  • 管理 FOSUserBundle 中的用户/角色/组

    我正在开发一个简单的 CRUD 来管理我正在使用的应用程序的用户 角色 组 管理我正在使用的用户FOSUserBundle 我想做的事情可以通过以下几种方式来完成 将角色分配给组 然后将用户分配给这些组 直接为用户分配角色 但我不知道怎么办
  • 将字典列表转换为字典集

    如何从一个字典列表中创建一组字典 Example import copy v1 k01 v01 k02 k03 v03 k04 k05 v05 v2 k11 v11 k12 k13 v13 k14 k15 v15 data N 5 for
  • git 有没有办法获取给定提交的推送日期?

    我想知道是否有一种方法可以查看与 git 日志中每个提交相关的推送日期 如果这是不可能的 有没有办法查看某个推送下的所有提交 我编写了一个程序 需要在推送时跟踪提交 因为 git 日志是按提交日期而不是推送日期排序的 所以我无法看到推送的最
  • 根据 Google 散点图的值更改点颜色

    我正在创建一个谷歌散点图 我有一个数据系列 看起来像 var data new google visualization DataTable data addColumn number ID data addColumn number Va
  • 获取控制器名称

    在 WebApiConfig cs 中我有以下内容 public static void Register HttpConfiguration config config MapHttpAttributeRoutes config Serv
  • 等待取消的未来真正完成

    我有一个SwingWorker它调用一些不检查线程中断的代码 拨打电话后worker cancel true the worker get 方法会抛出CancellationException立即 正如预期的那样 但是 由于后台任务的代码从