gpt4 book ai didi

java - 一旦我的列表包含 3 个项目,Android 应用程序就会崩溃

转载 作者:行者123 更新时间:2023-12-01 13:10:53 26 4
gpt4 key购买 nike

我尝试构建我的第一个 Android 应用程序(一个新手 Snake 重制版),我注意到一旦我的 Snake 长度达到 3,程序总是崩溃。

我的蛇的每个部分都存储在一个名为“Segment”的类中,该类存储该 body 部分的 x 和 y 坐标以及生命周期。

static List<Segment> list = new ArrayList<Segment>();{  //my list
Segment startingSegment = new Segment(0, 0, 1); //adding starting element to my list
list.add(startingSegment);
}

出于测试原因,我做了一个特殊的循环,将元素添加到我的列表中:

while(list.size() < 2){                          //this works
Segment newSegment = new Segment(0, 0, 1);
list.add(newSegment);
}

while(list.size() < 3){ //this crashes the app already
Segment newSegment = new Segment(0, 0, 1);
list.add(newSegment);
}

日志猫:

    04-05 15:50:19.921: E/AndroidRuntime(14308): FATAL EXCEPTION: Thread-3556 04-05 
15:50:19.921: E/AndroidRuntime(14308): Process: com.example.snake, PID: 14308 04-05
15:50:19.921: E/AndroidRuntime(14308): java.util.ConcurrentModificationException 04-05
15:50:19.921: E/AndroidRuntime(14308): at
java.example.ArrayList$ArrayListIterator.next(ArrayList.java:573)

我真的不知道那里发生了什么,希望得到一些帮助。

最佳答案

I really don't know what's going on there and would appreciate some help.

这里发生的事情是您创建了一个共享 List对象,并尝试从多个线程访问它,而没有任何适当的同步。这会导致异常。考虑在列表周围使用同步列表包装器:

List<Segment> list = Collections.synchronizedList(new ArrayList<Segment>());

如果您仅添加和删除项目,这应该可以解决您的问题。如果您要迭代列表,您还必须更多地使用同步,因为同步集合上的迭代不是线程安全的。

关于java - 一旦我的列表包含 3 个项目,Android 应用程序就会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22881747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com