2015-04-21 4 views
-2

Мой код компилируется, но я получаю эту ошибку во время выполнения:Получение исключение ArrayIndexOutOfBoundsException во время выполнения

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 5 
at staffstore.writestaff(staffstore.java:16) 
at addStaffGUI$2.actionPerformed(addStaffGUI.java:89) 

Это часть кода, я считаю, быть причиной проблемы:

 JButton submit = new JButton("Submit"); 
    submit.setBounds(145,470,100,20); 
    panel2.add(submit); 
    submit.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
      stfname =(stfnametb.getText()); 
      stlname =(stlnametb.getText()); 
      staddress2 =(staddresstb.getText()); 
      stphone2 =(stphonetb.getText()); 

      try { 
       staffstore.writestaff(); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
      third.dispose(); 

      } 
     }); 

Это линия 9-19 из StaffStore.java

String[] stlist = new String[5]; 
    /*stlist[0] = addStudentGUI.fname; 
    stlist[1] = addStudentGUI.lname; 
    stlist[2] = addStudentGUI.sgrade; 
    stlist[3] = addStudentGUI.saddress; 
    stlist[4] = addStudentGUI.sphone;*/ 

    stlist[5] = addStaffGUI.stfname; 
    stlist[6] = addStaffGUI.stlname; 
    stlist[7] = addStaffGUI.staddress2; 
    stlist[8] = addStaffGUI.stphone2; 
+0

Где код для строки 16 staffstore.java? Здесь ваша проблема связана с сообщением об исключении: 'at staffstore.writestaff (staffstore.java:16)'. Он утверждает, что значение индекса массива или коллекции равно 5, когда массив или коллекция не содержат 5 элементов. –

+0

'ArrayIndexOutOfBoundsException' - это исключение во время выполнения, так что вы не столкнетесь с ним при компиляции. – Makoto

+0

Я включил строку 16 штатного магазина.java только сейчас – zuse12345

ответ

4

массив размера п может иметь только положение индекса до размера n-1. Самый высокий такой индекс для массива размером 5 равен 4.

Тем не менее, эти четыре заявления являются незаконными:

stlist[5] = addStaffGUI.stfname; 
stlist[6] = addStaffGUI.stlname; 
stlist[7] = addStaffGUI.staddress2; 
stlist[8] = addStaffGUI.stphone2; 

Я не совсем уверен, что ваш motiviation здесь, но вы должны получить эти четыре значения в границах.

stlist[0] = addStaffGUI.stfname; 
stlist[1] = addStaffGUI.stlname; 
stlist[2] = addStaffGUI.staddress2; 
stlist[3] = addStaffGUI.stphone2; 

Поскольку вы также получили другие ценности закомментированы, это может быть простым вопросом увеличения размера вашего массива, тоже:

String[] stlist = new String[9]; 

... но тогда вы должны быть что вы не пытаетесь вызвать какие-либо методы в любой из первых пяти записей в массиве.

2

У вас есть массив, содержащий 5 предметов, и вы пытаетесь получить значение в 6-м месте. Не делай этого.

String[] stlist = new String[5]; 
stlist[5] = addStaffGUI.stfname; 

Также вы пытаетесь хранить различную информацию в одном массиве, что является плохим и хрупким дизайном. Вместо этого создайте массив или лучше, элемент ArrayList of Staff.

// declared as a field of the class: 
private List<Staff> staffList = new ArrayList<>(); 

// elsewhere 
submit.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     String stfname = stfnametb.getText(); 
     String stlname = stlnametb.getText(); 
     String staddress2 = staddresstb.getText(); 
     String stphone2 = stphonetb.getText(); 

     // use information obtained to create a Staff object 
     Staff staff = new Staff(stfname, stlname, staddress2, stphone2); 

     // maybe done here, maybe in staffStore 
     staffList.add(staff); 

     try { 
      // pass the Staff object into this method 
      staffstore.writestaff(staff); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     third.dispose(); 
    } 
}); 

Наиболее важные уроки, чтобы получить из этого опыта являются:

  • Просто потому, что код компилируется не означает, что это правильно .
  • Исключить stacktrace часто содержит ключевую информацию, которая сообщит вам, что именно не так и где. Прочтите его критически и внимательно посмотрите на строки, которые он указывает вам.
Смежные вопросы