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