小编Som*_*Guy的帖子

同步错误-ArrayList被多个线程访问

这是在java中。我的程序的目的是每秒多次捕获计算机屏幕的屏幕截图,并找到具有特殊红色阴影的所有像素。然后,它找到所有红色像素的平均位置。

为了提高图像处理的效率,我创建了 3 个线程,每个线程处理 1/4 的像素。这些线程加上原始线程将因此处理所有像素。但是,我的 avgLocation() 方法中不断出现错误。这是一个空指针异常,我认为这是因为其他线程正在更改包含所有红色像素的列表的大小,这导致程序访问不存在的像素的数据。为了解决这个问题,我在 Thread2 的代码之后在 Thread1 和 Thread2 上使用了 .join,然后在 Thread3 的代码段之后使用了 .join。因此,在调用 avgLocation 方法之前应该连接所有线程,但每当屏幕上出现特定的红色阴影时,它仍然会给出 NullPointerException。这是堆栈跟踪

Exception in thread "main" java.lang.NullPointerException
    at Images.avgLocation(Images.java:151)
    at Images.processImage(Images.java:133)
    at Images.main(Images.java:169)
Run Code Online (Sandbox Code Playgroud)

151 号线是

                xSum += list.get(i)[0];

Run Code Online (Sandbox Code Playgroud)

第 133 行是这是我的代码:

import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
import java.util.ArrayList;

public class Images {
    //takes in an input image and a target color and a bound to check within, returns …
Run Code Online (Sandbox Code Playgroud)

java multithreading image-processing thread-safety

0
推荐指数
1
解决办法
145
查看次数