"Variable not initialized" 错误
"Variable not initialized" error
当我尝试将 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
但当我向它添加 ActionListener
时它检测到初始化的 popupHostJoin
变量。
您仅在 else
部分初始化变量。如果 if
条件为真(即 nickname.equals(JL_CurrentUsers.getSelectedValue()
returns 为真),则永远不会初始化 popupRequest
。这就是编译器抛出错误的原因。
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()) 为假则变量不会被初始化。
当我尝试将 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
但当我向它添加 ActionListener
时它检测到初始化的 popupHostJoin
变量。
您仅在 else
部分初始化变量。如果 if
条件为真(即 nickname.equals(JL_CurrentUsers.getSelectedValue()
returns 为真),则永远不会初始化 popupRequest
。这就是编译器抛出错误的原因。
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()) 为假则变量不会被初始化。