PRB: ERROR: java.lang.ArrayIndexOutOfBoundsException

Last reviewed: January 29, 1998
Article ID: Q173788
The information in this article applies to:
  • Microsoft Visual J++, versions 1.0, 1.1

SYMPTOMS

Attempting to execute a Java Application without passing Command-Line or Program Arguments, as your Java application expects, results in the following error:

     ERROR: java.lang.ArrayIndexOutOfBoundsException

CAUSE

This is because when the Java program accesses the "args" array for the Command-Line or Program arguments, it tries to get items from the array that are out of the arrays bounds (the index used is higher than the number of array items - 1).

RESOLUTION

To fix this problem, you need to pass in Program Arguments or Command-Line arguments when executing your Java program that expects them. The More Information section below shows how to specify Program Arguments under the IDE.

You can also put a try-catch block around the code that accesses the program arguments. This code should catch an ArrayIndexOutOfBoundsException.

STATUS

This behavior is by design.

MORE INFORMATION

When executing your Java program under the IDE that expects Command-Line or Program arguments, you can select Settings from the Project menu, click the Debug tab, and select Category:Program arguments to set the program arguments. If you are using Visual J++ 1.0, then you can select Settings from the Build menu, click the Debug tab, and select Category:Program Arguments to set the program arguments.

Steps to Reproduce Behavior

  1. Create a Java Project and include the following code snippet in it.

  2. The following code snippet was taken from "Learn Java Now":

          import java.io.*;
    

          class App1_2
          {
    
             public static void main(String args[])
             {
          // uncomment the next line to make the program catch the exception:
          //  try {
                 int nMonth = Integer.parseInt(args[0]);
              int nDay   = Integer.parseInt(args[1]);
              int nYear  = Integer.parseInt(args[2]);
    
              int nDayInYear = 0;
    
              for (int nM = 0; nM < nMonth; nM++)
              {
               switch(nM)
               {
    
               case 4: case 6: case 9: case 11:
                  nDayInYear +=30;
                  break;
    
               case 2:
                  nDayInYear +=28;
    
                  if (((nYear % 4) == 0) && ((nYear % 100) != 0))
                  {
                   nDayInYear++;
                  }
                  break;
    
                  default:
                  nDayInYear += 31;
               }
              }
    
              nDayInYear += nDay;
    
              System.out.print (nMonth + "-" + nDay + "-" + nYear);
              System.out.println (" is day number "
                      + nDayInYear
                      + " in the year");
             }
    
          // uncomment this section to make the program catch the exception:
          // } catch (ArrayIndexOutOfBoundsException e) {
          //   System.out.println("This program takes 3 parameters: ");
          //   System.out.println("  month day year.");
          // }
    
          }
    
    

  3. Build the project and Execute it under the IDE.

  4. The ArrayIndexOutofBoundsException error appears.

REFERENCES

For the latest Knowledge Base articles and other support information on Visual J++ and the SDK for Java, see the following page on the Microsoft Technical Support site:

   http://support.microsoft.com/support/visualj/
   http://support.microsoft.com/support/java/

Keywords          : kberrmsg VJGenIss
Technology        : kbInetDev
Version           : WINDOWS:1.0,1.1
Platform          : WINDOWS
Issue type        : kbprb


================================================================================


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: January 29, 1998
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.