2015-05-06 141 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

如果'nickname.equals(JL_CurrentUsers.getSelectedValue())'为false,那么您只能为'popupRequest'指定一个值......您认为该值有什么用处?这听起来像你应该只在该分支中添加动作侦听器... –

+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())是假,则变量不会被初始化。