Я пишу класс, который расширяет 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
Пожалуйста, покажите реальный код. Укажите, какая строка вызывает ошибку. Поле экземпляра всегда инициализируется по крайней мере до значения по умолчанию, которое равно 0 для int, и ваша ошибка указывает на то, что причиной является проблема с теневой переменной внутри метода или конструктора. –
Если он говорит, что тип переменной может быть не инициализирован, что же означает 'currentSize'? –
Специально покажите код конструктора. Я готов поспорить, что первый '...' включает в себя 'if',' while' или 'return'. – cHao