【发布时间】:2015-05-26 05:52:52
【问题描述】:
我正在开发一个小模块,作为一个非常大的开源项目的一部分。整个程序录制音频,用户可以选择实时运行分析的各种模块。我的模块有几个文本框,允许用户跟踪操作参数。有时,当同时加载大量模块并对数据进行操作时,更改其中一个文本框会导致程序在尝试提醒我的模块有新数据时出现阻塞。
导致错误的行是
pamObservers.get(i);
pamObservers 是一个大小为 4 的 ArrayList,我的模块在索引 3 中。发生错误时 i=3。错误信息是
IndexOutOfBoundsException: Index: 3, Size: 4
我正在使用 Eclipse IDE,并且我为该异常添加了一个断点,因此它会立即停止。我在变量视图中查看 pamObservers,我可以看到我的模块在那里 - 索引位置不是 null 或任何东西。我可以在 Expressions 视图中键入该行,它会返回我的模块的名称。
我不知道如何解决这个问题,因为它似乎应该可以工作。错误是随机的 - 有时我必须在它发生之前更改文本框 4 或 5 次。任何建议将不胜感激,因为我已经绕圈跑了将近 2 个小时,我只是不知道该怎么做。非常感谢。
【问题讨论】:
-
你需要检查 pamObservers 是否为空。使用前
-
请向我们展示您的其余代码
-
通常不可能获得索引小于大小的 IOOBE。
ArrayList中对应的代码是rangeCheck方法:if (index >= size) throw new ...。所以我只能假设线程问题。这也将符合您偶尔收到错误的观察结果。您的问题缺少一些代码,因此我们无法重现您的问题。请创建并发布MCVE。 -
这非常奇特。
-
我很抱歉没有包含代码。我给出的那行只是一个简短的 for 循环的一部分,从 0 到 pamObservers.size()。至于重现错误,我认为如果不运行整个程序就无法重现它。线程问题似乎是一种确定的可能性 - 调试视图将其显示为 41 个线程中的第 13 个线程,我不知道其他线程中发生了什么。我根本没有太多使用线程,所以如果这是问题所在,那么我真的有麻烦了......
标签: java arraylist indexoutofboundsexception