"变量未初始化"错误

时间:2015-05-06 16:55:36

标签: java variables popup jmenuitem

当我尝试将.style("fill", function (d) { return d3.select(this).classed(nodeToStatus[d.name], true); }) 添加到我的ActionListener变量时,我收到此错误,如代码段所示。

  

错误:变量popupRequest可能尚未初始化               popupRequest.addActionListener(new ActionListener(){
  1错误

所以有意义地说我的popupRequest没有初始化,这可能就是抛出错误的原因。但事情是我做了初始化那个变量。

代码段

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变量有效。

2 个答案:

答案 0 :(得分:1)

仅在else部分初始化变量。如果if条件为真(即nickname.equals(JL_CurrentUsers.getSelectedValue()返回true),则永远不会初始化popupRequest。这就是编译器抛出错误的原因。

答案 1 :(得分: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())为false,则该变量不会被初始化。