2013-11-29 8 views
-1

Я пишу класс, который расширяет JFrame и реализует ActionListener. У меня есть частный int "currentSize". Он инициализируется в конструкторе. Существуют методы, которые вызывается actionPerformed, которые используют «currentSize». Когда я пытаюсь скомпилировать, он говорит, что «тип переменной может не быть инициализирован», выделяя использование currentSize. Я понимаю, почему эта ошибка возникает, но как ее исправить?Частная переменная экземпляра «не инициализирована» в GUI (java)

class GUIinterface extends JFrame implements ActionListener 
{ 
    ... 
    private int currentSize; 
    ... 

    public GUIinterface() 
    { 
     super("Contact database"); 

     contact = new Contact[1000]; 
     currentSize = 0; 
     currentState = STATE_NOTHING; 

     setSize(600, 400); 
     createMenu(); 

     setVisible(true); 
    } 

    private void createParseEmail() 
    { 
     Component[] component = formCreate.getComponents(); 
     String value; 

     long customerID; 
     int type; 
     String email; 
     String user; 
     String domain; 

     // ID 
     value = ((JTextField)(component[1])).getText(); 
     try 
     { 
      customerID = Long.parseLong(value); 
     } 
     catch (NumberFormatException e) 
     { 
      formCreate.remove(17); 
      JLabel label = new JLabel(" Customer ID is a long integer"); 
      formCreate.add(label, 17); 
      return; 
     } 

     // type 
     value = ((JTextField)(component[3])).getText(); 
     try 
     { 
      customerID = Integer.parseInt(value); 
     } 
     catch (NumberFormatException e) 
     { 
      formCreate.remove(17); 
      JLabel label = new JLabel(" Contact type is an integer"); 
      formCreate.add(label, 17); 
      return; 
     } 

     // email 
     email = ((JTextField)(component[5])).getText(); 
     if (email.indexOf("@") == -1 || email.indexOf(".") == -1) 
     { 
      formCreate.remove(17); 
      JLabel label = new JLabel(" Valid email required"); 
      formCreate.add(label, 17); 
      return; 
     } 
     user = email.split("@")[0]; 
     domain = email.split("@")[1]; 
     if (user.length() < 1 || domain.length() < 1) 
     { 
      formCreate.remove(17); 
      JLabel label = new JLabel(" Valid email required"); 
      formCreate.add(label, 17); 
      return; 
     } 

     contact[currentSize] = new EmailContact(customerID, user, domain, type); 
     currentSize++; // causes error; am not allowed to use dynamic arrays 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     String command = e.getActionCommand(); 
     if (e.getSource() instanceof JMenuItem) 
     { 
      if (command.equals("CREATE_CONTACT")) 
      { 
       currentState = STATE_CREATE; 
       setupCreate(); 
      } 
      if (command.equals("ERASE_CONTACT")) 
      { 
       currentState = STATE_ERASE; 
      } 
      if (command.equals("DISPLAY_CONTACTS")) 
      { 
       currentState = STATE_DISPLAY; 
      } 
      if (command.equals("FIND_CONTACT")) 
      { 
       currentState = STATE_FIND; 
      } 
     } // end of MenuItem 

     if (e.getSource() instanceof JButton) 
     { 
      if (currentState == STATE_CREATE) 
      { 
       if (command.equals("CREATE_TELEPHONE")) 
       { 
        setupCreateTelephone(); 
       } 
       else if (command.equals("CREATE_EMAIL")) 
       { 
        setupCreateEmail(); 
       } 
       else if (command.equals("CREATE_POSTAL")) 
       { 
        setupCreatePostal(); 
       } 
       else if (command.equals("CREATE_TELEPHONE_REGISTER")) 
       { 
        createParseTelephone(); 
       } 
       else if (command.equals("CREATE_EMAIL_REGISTER")) 
       { 
        createParseEmail(); 
       } 
       else if (command.equals("CREATE_POSTAL_REGISTER")) 
       { 
        createParsePostal(); 
       } 
      } 
     } 
     revalidate(); 
    } 
} 

BTW Я использую DrJava с Java ver. 7_45 ** Извиняюсь, если мой предыдущий код был слишком sparce

+3

Пожалуйста, покажите реальный код. Укажите, какая строка вызывает ошибку. Поле экземпляра всегда инициализируется по крайней мере до значения по умолчанию, которое равно 0 для int, и ваша ошибка указывает на то, что причиной является проблема с теневой переменной внутри метода или конструктора. –

+1

Если он говорит, что тип переменной может быть не инициализирован, что же означает 'currentSize'? –

+0

Специально покажите код конструктора. Я готов поспорить, что первый '...' включает в себя 'if',' while' или 'return'. – cHao

ответ

2

Эта линия contact[currentSize] = new EmailContact(customerID, user, domain, type); использует переменную type, но ни одна строка перед ним никогда не дает локальную переменную type значение.

+0

Ничего себе .. это работает .. Доктор Джава выделял неправильную линию ...>. ithenoob

Смежные вопросы