请大虾看下面程序运行时,抛出空指针异常是怎么回事^_^
源代码如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class MenuTest extends JFrame
  implements ActionListener,MenuListener
{
public MenuTest()
{
setTitle("MenuTest");
setSize(400,300);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
JMenuBar mbar=new JMenuBar();
setJMenuBar(mbar);
JMenu fileMenu=new JMenu("File");
//fileMenu.addMenuListener(this);
fileMenu.add(this);
JMenuItem openItem=new JMenuItem("Open");
openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
saveItem=new JMenuItem("Save");
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
saveAsItem=new JMenuItem("Save As");
mbar.add(makeMenu(fileMenu,new Object[]{"New",openItem,null,saveItem,saveAsItem,null,"Exit"},this));
readonlyItem=new JCheckBoxMenuItem("Read-only");
ButtonGroup Group=new ButtonGroup();
JRadioButtonMenuItem insertItem=new JRadioButtonMenuItem("Insert");
insertItem.setSelected(true);
JRadioButtonMenuItem overtypeItem=new JRadioButtonMenuItem("Overtype");
Group.add(insertItem);
Group.add(overtypeItem);
mbar.add(makeMenu("Edit",new Object[]{new JMenuItem("Cut",new ImageIcon("1.gif")),new JMenuItem("Copy",new ImageIcon("1.gif")),new JMenuItem("Paste",new ImageIcon("1.gif")),null,makeMenu("Options",new Object[] {readonlyItem,null,insertItem,overtypeItem},this)},this));
JMenu helpMenu=new JMenu("Help");
helpMenu.setMnemonic('H');
mbar.add(makeMenu(helpMenu,new Object[]{new JMenuItem("Index",'I'),new JMenuItem("About",'A')},this));
popup=makePopupMenu(new Object[]
{
"Cut","Copy","Paste"
},this);
getContentPane().addMouseListener(new MouseAdapter()
{
public void mouseReleased(MouseEvent evt)
{
if(evt.isPopupTrigger())
popup.show(evt.getComponent(),evt.getX(),evt.getY());
}
});
}
public void actionPerformed(ActionEvent evt)
{
String arg=evt.getActionCommand();
System.out.println(arg);
if(arg.equals("Exit")) System.exit(0);
}
public void menuSelected(MenuEvent evt)
{
saveItem.setEnabled(! readonlyItem.isSelected());
saveAsItem.setEnabled(! readonlyItem.isSelected());
}
public void menuDeselected(MenuEvent evt)
{
}
public void menuCanceled(MenuEvent evt)
{}
public static JMenu makeMenu(Object parent,Object[] items,Object target)
{
JMenu m=null;
if(parent instanceof JMenu) m=(JMenu)parent;
else if(parent instanceof String) m=new JMenu((String)parent);
else return null;
for(int i=0;i<items.length;i++)
{
if(items[i]==null) m.addSeparator();
else m.add(makeMenuItem(items[i],target));
}
return m;
}
public static JMenuItem makeMenuItem(Object item,Object target)
{
JMenuItem r=null;
if(item instanceof String) r=new JMenuItem((String)item);
else if(item instanceof JMenuItem) r=(JMenuItem)item;
else return null;
if(target instanceof ActionListener) r.addActionListener((ActionListener)target);
return null;
}
public static JPopupMenu makePopupMenu(Object []items,Object target)
{
JPopupMenu m=new JPopupMenu();
for(int i=0;i<items.length;i++)
{
if(items[i]==null) m.addSeparator();
else m.add(makeMenuItem(items[i],target));
}
return m;
}
public static void main(String args[])
{
Frame f=new MenuTest();
    f.show();
}
private JMenuItem saveItem;
private JMenuItem saveAsItem;
private JCheckBoxMenuItem readonlyItem;
private JPopupMenu popup;
}
等待各位大虾的帮助^-^