You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwingWorker的process方法中chunks.size()-1始终为0问题排查

问题分析与修复

你犯的核心错误是搞混了process方法里chunks列表的索引和元素值:

  • publish(counter)并不会每次调用都立刻触发process,SwingWorker会把多次发布的值攒成一个列表(也就是chunks)再一次性交给process处理
  • 你写的chunks.size() - 1是在拿这个列表最后一个元素的下标(比如列表有1个元素时,下标就是0),而不是你通过publish传进来的counter数值本身

修正代码

直接取chunks里最后一个元素的值即可:

@Override
protected void process(List<Integer> chunks) {
    int latestCounter = chunks.get(chunks.size() - 1);
    System.out.println(latestCounter + " / " + tickers.size());
}

要是你想处理每一次publish的数值(比如某次process被触发时,chunks里攒了好几个值),也可以遍历整个列表:

@Override
protected void process(List<Integer> chunks) {
    for (int counter : chunks) {
        System.out.println(counter + " / " + tickers.size());
    }
}

额外说明

SwingWorker这么设计是为了减少对事件调度线程(EDT)的调用次数,避免频繁更新操作导致卡顿。所以chunks的长度不一定是1,得做好批量处理的准备。

内容的提问来源于stack exchange,提问作者BitQueen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:40:35