2

我有一个 Java 应用程序,其中包含在不同 Java 类中创建的两个线程。一个线程用于写入图像文件,另一个线程同时读取同一个文件。两个线程同时运行。

但经过几次尝试后,线程被阻塞并显示以下异常:

java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:371)
at java.util.ArrayList.get(ArrayList.java:384)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.checkTablesOnly(JPEGImageReader.java:373)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.gotoImage(JPEGImageReader.java:476)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readHeader(JPEGImageReader.java:597)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1054)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1034)
at javax.imageio.ImageIO.read(ImageIO.java:1448)
at javax.imageio.ImageIO.read(ImageIO.java:1308)
    at java.lang.Thread.run(Thread.java:722)

在此异常之后,应用程序将自行终止。如何解决这个问题呢?

如何在两个不同的 Java 类中同步这两个线程?

4

2 回答 2

2

java.lang.ArrayIndexOutOfBoundsException是由代码试图访问某个不存在的数组值引起的。

例如:

String[] myArray = new String[5];

for(int i = 0; i < myArray.length; i++) {
    myArray[i] = "Value: " + i;
}

System.out.println(array[6].toString());

由于您的数组只有 5 长,并且您尝试访问不存在的第 6 个数组,因此您会遇到异常。

于 2013-07-03T07:17:06.397 回答
1

如果您尝试读取同一文件,请确保在访问共享资源时已在同一对象上同步线程。这可能会抛出 ArrayIndexOutOfBoundsException

于 2013-07-03T07:26:40.493 回答