| Author |
Two list class variables used at same time causing array out of bounds exception
|
Jeff Grant
Ranch Hand
Joined: Dec 19, 2001
Posts: 169
|
|
I have two java.awt.list variables called list1 and list2. I have two arrays of type String which are equal length and are never null (contain static data every time the program is run). I have a loop running from 0 to the end of ethe arrays (both of size 984). I am getting java.lang.ArrayIndexOutOfBoundsException numerous times as this loop runs.. at different element numbers each time it is run. However, if I set either list#.add to put in the array[0] it runs through flawlessly... this proves both arrays are holding the correct data. I only get the error when both are going through each array. Even moved the two list#.add lines into individual loops but the same errors continued.
|
 |
David Harkness
Ranch Hand
Joined: Aug 07, 2003
Posts: 1646
|
|
|
Have you tried printing the length of the two arrays before looping?Once you get an exception, does each loop iteration throw the same exception, or is the exception thrown only for some elements within the loop (which should be impossible unless you're changing the array references)?
|
 |
ramprasad madathil
Ranch Hand
Joined: Jan 24, 2005
Posts: 489
|
|
If its not too important that the two lists should be populated in the same loop you could try the below code ram.
|
 |
Marilyn de Queiroz
Sheriff
Joined: Jul 22, 2000
Posts: 9033
|
|
It is usually better to do a for loop by using the array.length rather than a hard coded number. I suggest you use for ( int loop1 = 0; loop1 < display1.length ; loop1++ )
|
JavaBeginnersFaq
"Yesterday is history, tomorrow is a mystery, and today is a gift; that's why they call it the present." Eleanor Roosevelt
|
 |
Jeff Grant
Ranch Hand
Joined: Dec 19, 2001
Posts: 169
|
|
Let me say thank you first for all your replies.
Originally posted by David Harkness: Have you tried printing the length of the two arrays before looping?Once you get an exception, does each loop iteration throw the same exception, or is the exception thrown only for some elements within the loop (which should be impossible unless you're changing the array references)?
The array lengths are static as I initialize both arrays to size 1000 as well as place a "" in every field before it ever gets to this portion of my code. The loop length on the other hand is not.. I have a count variable which is where the loop actually goes to, this was just an example so I figured I would hard code it as to avoid unnecessary code.
Originally posted by ramprasad madathil: If its not too important that the two lists should be populated in the same loop you could try the below code ram.
It is important.. but regardless, I did try what you said yesterday and each loop still randomly errors with the same exception. When I say "random" I mean it's in a different place every time I run the code using the same data file. Please keep the suggestions coming.. I checked my memory available via the Task Manager on Windows XP Professional and I seem to have plenty free so that is not the issue. Thank you.
|
 |
Ernest Friedman-Hill
author and iconoclast
Marshal
Joined: Jul 08, 2003
Posts: 24081
|
|
Humor us: add these lines right before this loop: System.out.println("Display1: " + display1.length); System.out.println("DisplayConvertedFull: " + displayConvertedFull.length); Run the program, tell us what it prints.
|
[Jess in Action][AskingGoodQuestions]
|
 |
Jeff Grant
Ranch Hand
Joined: Dec 19, 2001
Posts: 169
|
|
Originally posted by Ernest Friedman-Hill: Humor us: add these lines right before this loop: System.out.println("Display1: " + display1.length); System.out.println("DisplayConvertedFull: " + displayConvertedFull.length); Run the program, tell us what it prints.
Sure thing.. both came back with 10000.
|
 |
Paul Sturrock
Bartender
Joined: Apr 14, 2004
Posts: 10336
|
|
|
Are you hard-coding your 984 value? Or is this the expected value of a variable?
|
JavaRanch FAQ HowToAskQuestionsOnJavaRanch
|
 |
Jeff Grant
Ranch Hand
Joined: Dec 19, 2001
Posts: 169
|
|
This seems to be a decent work around. Assumed that if the code gets to the loop1++ then it has successfully added to both lists. However, my only concern is that if the list1 add is successful but list2 add is not, then list1 will have an extra row potentially every time the list2 fails... but so far that scenario has not occurred. FWIW, list1 is holding ASCII values which are not standard characters. I do not feel this is a problem as the characters are the same every time the file is read, but the exception occurs at a different line every time (or not at all in some cases). [ March 01, 2005: Message edited by: Jeff Grant ]
|
 |
Paul Sturrock
Bartender
Joined: Apr 14, 2004
Posts: 10336
|
|
984 is the total number of lines read in from a file. I just simplified my example by hard coding it for you.
Please don't simplify it for our case. Can you show us how you assign this value? Could you show the (however many) lines before you get to the loop which assigns values to your arrays and sets this variable which you believe to be 984?
FWIW, list1 is holding ASCII values which are not standard characters. I do not feel this is a problem as the characters are the same every time the file is read, but the exception occurs at a different line every time (or not at all in some cases).
What you are storing in these lists is immaterial. No method in java.awt.List throws an ArrayIndexOutOfBounds exception so it is not adding things to these Lists which causes the exception. [ March 01, 2005: Message edited by: Paul Sturrock ]
|
 |
Jeff Grant
Ranch Hand
Joined: Dec 19, 2001
Posts: 169
|
|
It is literally as simple as that.. totalLines = 984 is output to the prompt so I know that is correct. I display this java.awt.list on the screen and scroll down.. I have a listener which tells me what line I click when I click it in either list (list1 - unconverted, list2 - converted). Both have the correct number of lines. I can also confirm the number of lines by opening the unconverted file in a text editor.
|
 |
Paul Sturrock
Bartender
Joined: Apr 14, 2004
Posts: 10336
|
|
|
How big is your class? Is it practical to post the whole thing here?
|
 |
Jeff Grant
Ranch Hand
Joined: Dec 19, 2001
Posts: 169
|
|
Originally posted by Paul Sturrock: How big is your class? Is it practical to post the whole thing here?
It's only about 1300 lines.. not the biggest, but I don't think we'd want it all here. I guess that since it doesn't seem like an obvious problem to anyone, I'll keep with my "while" work around as it doesn't seem to be causing any inconsistancies.. thanks for trying to help.
|
 |
David Harkness
Ranch Hand
Joined: Aug 07, 2003
Posts: 1646
|
|
I'm totally perplexed how it fails since the if and while loops you posted are equivalent given your revised for loop. Very strange. Do you always get the exception accessing the same array, and do you get exceptions for every element after the failed one in the same array? In other words, if element 10 is out of bounds, 11, 12, ... must also be out of bounds and throw exceptions.
|
 |
ramprasad madathil
Ranch Hand
Joined: Jan 24, 2005
Posts: 489
|
|
Originally posted by Jeff Grant The array lengths are static as I initialize both arrays to size 1000... and later...... The loop length on the other hand is not.. I have a count variable which is where the loop actually goes to........
The only thing that I can see that may have cause this error is that the loop length exceeds the array length. Are you sure loop length returns 984 always? If had been ,it would never ever throw an ArrayIndexOutOfBoundsException provided there are no loop increment expressions inside your loop. ram.
|
 |
 |
|
|
subject: Two list class variables used at same time causing array out of bounds exception
|
|
|