它创建了一个画布,并允许我通过使用Point
和HashSet
从鼠标获取Iterator
来用鼠标在画布上绘画。
它还通过DatagramSocket
连接到另一个相同的程序,并将它生成的Point
发送到另一个程序,该程序在画布上显示该程序。
为此,我使用Runnable
线程侦听传入的Point
,并将它们添加到HashSet
。
我的问题是我得到了java.util.ConcurrentModificationException
,因为我在绘画时通过线程从连接的程序中将Point
添加到了HashSet
中。
我看不到该异常的解决方法,因为我想实时更新画布。
使用CopyOnWriteArraySet
解决了这个问题,我可以用它简单地替换我的HashSet
:) thx以得到您的所有支持!
所以我的程序是绘画版本。它创建了一个画布,并允许我通过使用HashSet和Iterator从鼠标获取Point's来用鼠标在画布上绘画。它还连接到...
使用ConcurrentSkipListSet代替HashSet
您可以通过锁定设备来避免这种情况。在两个线程中都使用“同步”块,并在访问它们之前锁定该集合,因此不会有两个线程同时修改该集合。