所以我有一个List
public static List<Position> chests = new ArrayList<Position>();
在我的主类中,但在这个主类中,我有一个使用此列表的匿名类(一个线程)。无论出于何种原因,此线程无法正确读取此列表中的信息。这是我的匿名类的其他代码:
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < ChestGrabber.getChests().size(); i++) {
Position chest = (Position) ChestGrabber.getChests().get(i);
if (player.getDistance(chest.x, chest.y,
chest.z) <= 4.7F) {
openChest((int) chest.x, (int) chest.y, (int) chest.z);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// chests.remove(chest);
}
}
}
}).start();
我试图通过几种不同的方式访问列表:
ChestGrabber.getChests().size()
或
getChests().size()
或
chests.size()
..并且这些都不起作用:它们总是返回0
,因此完全跳过for
- 循环。
我忽略了什么吗?我似乎无法让这个工作。
答案 0 :(得分:1)
一切似乎都是对的。请尝试使用Iterator。并且由于您在第一次调用ChestGRabber.getChest期间获得了Something,因此将其保存在列表中并迭代在for循环中的相同列表中。它应该有效。试试我告诉你的,否则一切都是对的。尝试删除工作空间的元数据并再次导入项目(如果您使用的是eclpise),请尝试清理项目。你的代码是正确的
答案 1 :(得分:1)
您在启动新线程后立即调用chests.clear();
(但这并不意味着线程在调用start()
后运行)因此在新线程尝试读取之前可能会清除该列表从中。