2015-05-06 6 views
0

Я получаю эту ошибку, когда пытаюсь добавить ActionListener в мою переменную popupRequest, как показано в фрагменте кода.Ошибка «переменная не инициализирована»

error: variable popupRequest might not have been initialized popupRequest.addActionListener(new ActionListener() {
1 error

Так значит сказать, что мой popupRequest не инициализирован, и это, вероятно, почему выбрасывается ошибка. Но дело в том, что я инициализировал эту переменную.

Код сниппета

JPopupMenu popup = new JPopupMenu(); 
JMenuItem popupTitle,popupHostJoin,popupRequest; 
if (SwingUtilities.isRightMouseButton(evt)) { 
     JL_CurrentUsers.setSelectedIndex(JL_CurrentUsers.locationToIndex(evt.getPoint())); 
     popup.add(popupTitle = new JMenuItem("Private Message")); 
     popup.addSeparator(); 
     if (nickname.equals(JL_CurrentUsers.getSelectedValue())) 
      popup.add(popupHostJoin = new JMenuItem("Host...")); 
     else { 
      popup.add(popupRequest = new JMenuItem("Request..."));//I initialise it here 
      popup.add(popupHostJoin = new JMenuItem("Join...")); 
     } 

     popupHostJoin.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       new PvtMessageGUI(fHost,fPort,nickname).setVisible(true); 
      } 
     }); 
     //this is the line that gives me that error 
     popupRequest.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       client.sendMessage(new ChatMessage(ChatMessage.REQUEST,nickname+"->"+JL_CurrentUsers.getSelectedValue())); 
      } 
     }); 
     popup.show(JL_CurrentUsers,evt.getX(),evt.getY()); 
    } 

Я могу работать вокруг него инициализацией моей popupRequest, когда я первый объявить переменную.

JMenuItem popupTitle,popupHostJoin,popupRequest=new JMenuItem("Request"...); 

То, что я хочу знать .. В чем разница между инициализацией моей popupRequest, когда я объявил его в начале, и инициализации его в моем if-else заявления? И я не понимаю, почему программа не обнаружила инициализированный popupRequest, но он сделал для инициализированной переменной popupHostJoin, когда я добавил ActionListener.

+2

Вы присваиваете значение 'popupRequest', если' nickname.equals (JL_CurrentUsers.getSelectedValue()) является ложным ... что вы ожидаете от значения в противном случае? Похоже, вы должны добавить только прослушиватель действий в ветку 'if' ... –

+0

Невнятная ошибка моего ... Спасибо, что указали! –

+0

проверить это для ясного объяснения http://stackoverflow.com/questions/24152351/java-error-variable-might-not-have-been-initialized#24152369 – Anshuman

ответ

1

Вы инициализируете переменную только в части else. В случае, если условие if истинно (то есть nickname.equals(JL_CurrentUsers.getSelectedValue() возвращает true), то popupRequest никогда не инициализируется. Вот почему компилятор выдает ошибку.

+0

Спасибо, что указали мне это! Это глупая ошибка ... –

1
if (nickname.equals(JL_CurrentUsers.getSelectedValue())) 
      popup.add(popupHostJoin = new JMenuItem("Host...")); 
     else { 
      popup.add(popupRequest = new JMenuItem("Request..."));//I initialise it here 
      popup.add(popupHostJoin = new JMenuItem("Join...")); 
     } 

если nickname.equals (JL_CurrentUsers.getSelectedValue()) ложно, то переменная обыкновение быть инициализирован.

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