这是在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)