public class TestPopupMenu extends JFrame{
JPopupMenu menu;
public void init(){
menu= new JPopupMenu();
menu.add(new JMenuItem("A"));
//this.add(menu); //release the code then no error
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e){
menu.show(e.getComponent(),e.getX(),e.getY());
}
});
this.setSize(400,300);
this.setVisible(true);
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
TestPopupMenu menu = new TestPopupMenu();
menu.init();
}
}
当我运行,并使用鼠标右键点击面板后,报如下错误:
Exception occurred during event dispatching:
java.lang.NullPointerException: parent is null
但如果把PopupMenu和Menu换成JPopupMenu和JMenu,则没有这个问题。
虽然现在一般是不使用老AWT中的组件了,但我觉得这个问题很奇怪。
使用老AWT中的Menu组件,应该是可以实现"弹出菜单"功能的。
必須要先把 PopupMenu attach 到某個 component(這個 component 不需要是 invoke PopupMenu - show method 時指定的那個 component)。