import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JTextField;
import javax.swing.KeyStroke;public class MenuUseDemo extends JFrame
{
public static final int WIDTH=250;
public static final int Height=200;
private JMenuItem newItem;
private JMenuItem openItem;
private JMenuItem closeItem;
private JMenuItem saveItem;
private JMenuItem cutItem;
private JMenuItem copyItem;
private JMenuItem pasteItem;
private JMenuItem cutItemPop;
private JMenuItem copyItemPop;
private JMenuItem pasteItemPop;
private JRadioButtonMenuItem forwardItem;
private JRadioButtonMenuItem backwardItem;
private JPopupMenu popup;
private JTextField myTextField;
public MenuUseDemo()
{
setTitle("hello");
setSize(WIDTH,HEIGHT);
Container contentPane=getContentPane();
JPanel textPanel=new JPanel();myTextField=new JTextField("",20);
textPanel.add(myTextField);
contentPane.add(textPanel);JMenuBar menuBar=new JMenuBar();
setJMenuBar(menuBar);
JMenu fileMenu=new JMenu("文件");
fileMenu.setMnemonic('F');newItem=fileMenu.add(new ShowAction("新建"));
newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));openItem=fileMenu.add(new ShowAction("打开"));
openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
fileMenu.addSeparator();
saveItem=fileMenu.add(new ShowAction("保存"));
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK));
saveItem.setEnabled(false);closeItem=fileMenu.add(new ShowAction("退出"));
closeItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK));
closeItem.setEnabled(false);
fileMenu.addSeparator();JMenuItem exitItem=new JMenuItem("exit",'T');
exitItem.addActionListener(new AbstractAction("exit")
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);}
});exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,InputEvent.CTRL_MASK));
fileMenu.add(exitItem);
JMenu editMenu=new JMenu("编辑");
editMenu.setMnemonic('E');cutItem=new JMenuItem("剪切",'C');
editMenu.add(cutItem);cutItem.addActionListener(new ShowAction("剪切"));
cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,InputEvent.CTRL_MASK));
cutItem.setEnabled(false);copyItem=new JMenuItem("复制",'Y');
copyItem.addActionListener(new ShowAction("复制"));
copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y,InputEvent.CTRL_MASK));
copyItem.setEnabled(false);copyItem=new JMenuItem("粘贴",'P');
copyItem.addActionListener(new ShowAction("粘贴"));
copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
copyItem.setEnabled(false);editMenu.add(copyItem);
editMenu.add(pasteItem);JMenu searchMenu= new JMenu("搜索");
searchMenu.setMnemonic('S');ButtonGroup group=new ButtonGroup();
forwardItem=new JRadioButtonMenuItem("Forward");
forwardItem.addActionListener(new ShowAction("Forward"));
forwardItem.setSelected(true);
forwardItem.setEnabled(false);backwardItem=new JRadioButtonMenuItem("Backward");
backwardItem.addActionListener(new ShowAction("Backward"));
backwardItem.setEnabled(false);group.add(forwardItem);
group.add(backwardItem);searchMenu.add(forwardItem);
searchMenu.add(backwardItem);JMenu viewMenu=new JMenu("视图");
viewMenu.setMnemonic('V');JMenu optionMenu=new JMenu("选项");
optionMenu.setMnemonic('O');JCheckBoxMenuItem toolItem=new JCheckBoxMenuItem("ToolBar");
JCheckBoxMenuItem statusItem=new JCheckBoxMenuItem("Status");
toolItem.addActionListener(new ShowAction("ToolBar"));
statusItem.addActionListener(new ShowAction("Status"));optionMenu.add(toolItem);
optionMenu.add(statusItem);viewMenu.add(optionMenu);menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(searchMenu);
menuBar.add(viewMenu);popup=new JPopupMenu();cutItemPop=new JMenuItem("剪切",'C');
cutItemPop.addActionListener(new ShowAction("CutPop"));
cutItemPop.setEnabled(false);
copyItemPop=new JMenuItem("复制",'Y');
copyItemPop.addActionListener(new ShowAction("CopyPop"));
copyItemPop.setEnabled(false);pasteItemPop=new JMenuItem("粘贴",'P');
pasteItemPop.addActionListener(new ShowAction("PastePop"));
pasteItemPop.setEnabled(false);popup.add(cutItemPop);
popup.add(copyItemPop);
popup.add(pasteItemPop);
getContentPane().addMouseListener(new MouseAdapter()
{
public void mouseReleased(MouseEvent event)
{
if(event.isPopupTrigger())
popup.show(event.getComponent(),event.getX(),event.getY());
}
});
}private class ShowAction extends AbstractAction
{
public ShowAction(String name)
{
super(name);
}public void actionPerformed(ActionEvent event)
{
if(event.getSource()==newItem||event.getSource()==openItem)
{
saveItem.setEnabled(true);
closeItem.setEnabled(true);
cutItem.setEnabled(true);
copyItem.setEnabled(true);
pasteItem.setEnabled(true);
forwardItem.setEnabled(true);
backwardItem.setEnabled(true);
cutItemPop.setEnabled(true);
copyItemPop.setEnabled(true);
pasteItemPop.setEnabled(true);
}
if(event.getSource()==closeItem)
{
saveItem.setEnabled(false);
closeItem.setEnabled(false);
cutItem.setEnabled(false);
copyItem.setEnabled(false);
pasteItem.setEnabled(false);
forwardItem.setEnabled(false);
backwardItem.setEnabled(false);
cutItemPop.setEnabled(false);
copyItemPop.setEnabled(false);
pasteItemPop.setEnabled(false);
}
myTextField.setText(getValue(Action.NAME)+"selected.");
}
}
public static void main(String[] args)
{
MenuUseDemo frame=new MenuUseDemo();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}错误:Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at javax.swing.JPopupMenu.add(Unknown Source)
at javax.swing.JMenu.add(Unknown Source)
at MenuUseDemo.<init>(MenuUseDemo.java:115)
at MenuUseDemo.main(MenuUseDemo.java:227)

解决方案 »

  1.   

    import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.InputEvent;
    import java.awt.event.KeyEvent;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;import javax.swing.AbstractAction;
    import javax.swing.Action;
    import javax.swing.ButtonGroup;
    import javax.swing.JCheckBoxMenuItem;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.JPopupMenu;
    import javax.swing.JRadioButtonMenuItem;
    import javax.swing.JTextField;
    import javax.swing.KeyStroke;public class MenuUseDemo extends JFrame {
    public static final int WIDTH = 250; public static final int Height = 200; private JMenuItem newItem; private JMenuItem openItem; private JMenuItem closeItem; private JMenuItem saveItem; private JMenuItem cutItem; private JMenuItem copyItem; private JMenuItem pasteItem; private JMenuItem cutItemPop; private JMenuItem copyItemPop; private JMenuItem pasteItemPop; private JRadioButtonMenuItem forwardItem; private JRadioButtonMenuItem backwardItem; private JPopupMenu popup; private JTextField myTextField; public MenuUseDemo() {
    setTitle("hello");
    setSize(WIDTH, HEIGHT);
    Container contentPane = getContentPane();
    JPanel textPanel = new JPanel(); myTextField = new JTextField("", 20);
    textPanel.add(myTextField);
    contentPane.add(textPanel); JMenuBar menuBar = new JMenuBar();
    setJMenuBar(menuBar);
    JMenu fileMenu = new JMenu("文件");
    fileMenu.setMnemonic('F'); newItem = fileMenu.add(new ShowAction("新建"));
    newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
    InputEvent.CTRL_MASK)); openItem = fileMenu.add(new ShowAction("打开"));
    openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
    InputEvent.CTRL_MASK));
    fileMenu.addSeparator();
    saveItem = fileMenu.add(new ShowAction("保存"));
    saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
    InputEvent.CTRL_MASK));
    saveItem.setEnabled(false); closeItem = fileMenu.add(new ShowAction("退出"));
    closeItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,
    InputEvent.CTRL_MASK));
    closeItem.setEnabled(false);
    fileMenu.addSeparator(); JMenuItem exitItem = new JMenuItem("exit", 'T');
    exitItem.addActionListener(new AbstractAction("exit") {
    public void actionPerformed(ActionEvent event) {
    System.exit(0); }
    }); exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,
    InputEvent.CTRL_MASK));
    fileMenu.add(exitItem); JMenu editMenu = new JMenu("编辑");
    editMenu.setMnemonic('E'); cutItem = new JMenuItem("剪切", 'C');
    editMenu.add(cutItem); cutItem.addActionListener(new ShowAction("剪切"));
    cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,
    InputEvent.CTRL_MASK));
    cutItem.setEnabled(false); copyItem = new JMenuItem("复制", 'Y');
    copyItem.addActionListener(new ShowAction("复制"));
    copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y,
    InputEvent.CTRL_MASK));
    copyItem.setEnabled(false); copyItem = new JMenuItem("粘贴", 'P');
    copyItem.addActionListener(new ShowAction("粘贴"));
    copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
    InputEvent.CTRL_MASK));
    copyItem.setEnabled(false);

    /*
     * where is your “pasteItem”
     */
    pasteItem = new JMenuItem("xxxxxx"); editMenu.add(copyItem);
    editMenu.add(pasteItem); JMenu searchMenu = new JMenu("搜索");
    searchMenu.setMnemonic('S'); ButtonGroup group = new ButtonGroup();
    forwardItem = new JRadioButtonMenuItem("Forward");
    forwardItem.addActionListener(new ShowAction("Forward"));
    forwardItem.setSelected(true);
    forwardItem.setEnabled(false); backwardItem = new JRadioButtonMenuItem("Backward");
    backwardItem.addActionListener(new ShowAction("Backward"));
    backwardItem.setEnabled(false); group.add(forwardItem);
    group.add(backwardItem); searchMenu.add(forwardItem);
    searchMenu.add(backwardItem); JMenu viewMenu = new JMenu("视图");
    viewMenu.setMnemonic('V'); JMenu optionMenu = new JMenu("选项");
    optionMenu.setMnemonic('O'); JCheckBoxMenuItem toolItem = new JCheckBoxMenuItem("ToolBar");
    JCheckBoxMenuItem statusItem = new JCheckBoxMenuItem("Status");
    toolItem.addActionListener(new ShowAction("ToolBar"));
    statusItem.addActionListener(new ShowAction("Status")); optionMenu.add(toolItem);
    optionMenu.add(statusItem); viewMenu.add(optionMenu); menuBar.add(fileMenu);
    menuBar.add(editMenu);
    menuBar.add(searchMenu);
    menuBar.add(viewMenu); popup = new JPopupMenu(); cutItemPop = new JMenuItem("剪切", 'C');
    cutItemPop.addActionListener(new ShowAction("CutPop"));
    cutItemPop.setEnabled(false); copyItemPop = new JMenuItem("复制", 'Y');
    copyItemPop.addActionListener(new ShowAction("CopyPop"));
    copyItemPop.setEnabled(false); pasteItemPop = new JMenuItem("粘贴", 'P');
    pasteItemPop.addActionListener(new ShowAction("PastePop"));
    pasteItemPop.setEnabled(false); popup.add(cutItemPop);
    popup.add(copyItemPop);
    popup.add(pasteItemPop); getContentPane().addMouseListener(new MouseAdapter() {
    public void mouseReleased(MouseEvent event) {
    if (event.isPopupTrigger())
    popup
    .show(event.getComponent(), event.getX(), event
    .getY());
    }
    });

    /*设置其面板大小*/
    this.setSize(400,500);
    } private class ShowAction extends AbstractAction {
    public ShowAction(String name) {
    super(name);
    } public void actionPerformed(ActionEvent event) {
    if (event.getSource() == newItem || event.getSource() == openItem) {
    saveItem.setEnabled(true);
    closeItem.setEnabled(true);
    cutItem.setEnabled(true);
    copyItem.setEnabled(true);
    pasteItem.setEnabled(true);
    forwardItem.setEnabled(true);
    backwardItem.setEnabled(true);
    cutItemPop.setEnabled(true);
    copyItemPop.setEnabled(true);
    pasteItemPop.setEnabled(true);
    }
    if (event.getSource() == closeItem) {
    saveItem.setEnabled(false);
    closeItem.setEnabled(false);
    cutItem.setEnabled(false);
    copyItem.setEnabled(false);
    pasteItem.setEnabled(false);
    forwardItem.setEnabled(false);
    backwardItem.setEnabled(false);
    cutItemPop.setEnabled(false);
    copyItemPop.setEnabled(false);
    pasteItemPop.setEnabled(false);
    }
    myTextField.setText(getValue(Action.NAME) + "selected.");
    }
    } public static void main(String[] args) {
    MenuUseDemo frame = new MenuUseDemo();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    }
    }
      

  2.   

    如果是记事本的话~~~~文本区域类型应该JTextField和JScrollPane,使用GridLayout()进行布局,多查文档
    多写些代码,看见类似的错误就能比较快的找到了