Java 使用匿名类
所以我有一个清单Java 使用匿名类,java,class,anonymous,Java,Class,Anonymous,所以我有一个清单 public static List<Position> chests = new ArrayList<Position>(); 或 或 。。这些都不起作用:它们总是返回0,因此for-循环被完全跳过 我是不是忽略了什么?我好像没法让它工作。一切似乎都正常。尝试改用迭代器。由于您在第一次调用ChestGRabber.getChest时得到了一些东西,所以将其保存在一个列表中,并在for循环中迭代相同的列表。这本应该奏效的。照我说的去做,否则一切都会好的
public static List<Position> chests = new ArrayList<Position>();
或
或
。。这些都不起作用:它们总是返回0
,因此for
-循环被完全跳过
我是不是忽略了什么?我好像没法让它工作。一切似乎都正常。尝试改用迭代器。由于您在第一次调用ChestGRabber.getChest时得到了一些东西,所以将其保存在一个列表中,并在for循环中迭代相同的列表。这本应该奏效的。照我说的去做,否则一切都会好的。尝试删除工作区的元数据并再次导入项目(如果您使用的是eclpise),尝试清理项目。您的代码是正确的您正在调用
chests.clear()代码>在启动新线程后立即执行(但这并不意味着线程在调用start()
)后正在运行),因此在新线程尝试读取列表之前,列表可能会被清除 你怎么把数据放在列表里?你的列表一定是空的,伙计。在For循环之前,Sysout the List.size()是的,与使用匿名类无关。@immibis之所以添加,是因为我有一个打印大小的调试功能,每次我向列表中添加对象时,它都会增加大小。@DevinK在一个线程中所做的更改不能保证对其他线程可见,特殊情况除外。您如何将数据放入列表中?另外,发布getChests
的实现。我认为使用迭代器不会改变任何事情。列表的大小(以某种方式)从线程外部变为内部(run方法的第一行)。我可以尝试它,但我怀疑它会改变任何东西。我将尝试其他方法,看看是否有帮助。
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()