使用匿名类

时间:2014-07-21 11:32:02

标签: java class anonymous

所以我有一个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 - 循环。

我忽略了什么吗?我似乎无法让这个工作。

2 个答案:

答案 0 :(得分:1)

一切似乎都是对的。请尝试使用Iterator。并且由于您在第一次调用ChestGRabber.getChest期间获得了Something,因此将其保存在列表中并迭代在for循环中的相同列表中。它应该有效。试试我告诉你的,否则一切都是对的。尝试删除工作空间的元数据并再次导入项目(如果您使用的是eclpise),请尝试清理项目。你的代码是正确的

答案 1 :(得分:1)

您在启动新线程后立即调用chests.clear();(但这并不意味着线程在调用start()后运行)因此在新线程尝试读取之前可能会清除该列表从中。