java.lang.ArrayIndexOutOfBoundsException:-1

时间:2013-07-03 07:13:34

标签: java linux multithreading image image-processing

我有一个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类中同步这两个线程?

2 个答案:

答案 0 :(得分: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个数组,因此您将获得异常。

答案 1 :(得分:1)

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