当我尝试将.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
变量有效。
答案 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,则该变量不会被初始化。