2013-07-03 46 views
2

我有一個Java應用程序,它包含兩個在不同Java類中創建的線程。一個線程用於寫入圖像文件,另一個線程同時讀取同一文件。兩個線程都在同時運行。java.lang.ArrayIndexOutOfBoundsException:-1

但也有少數企圖線程被阻塞,並顯示以下異常後:

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

你能告訴我們你的代碼嗎? –

+0

'elementData'當時的大小是多少?你調試 – gnanz

+0

它的一個大的應用程序,所以我不能分享它 – rachana

回答

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,你會得到一個異常。

+0

我在兩個不同的java類中有兩個線程。我如何同步它們?你能指導我一些例子嗎? – rachana

+0

這是一個完全不同的問題,但你應該看看這個鏈接:http://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html – JREN

+0

@JREN只是技術,但'數組[6]。 toString()'將訪問myarray [];中的第7項) –

1

如果您試圖讀取同一個文件,請確保您在訪問共享資源時已將同一個對象的線程同步。這可能會拋出ArrayIndexOutOfBoundsException

相關問題