这是个简单的记事本程序,还没完成,在进行右键菜单设置时出现问题~~~求助各位高手啊~~~
运行时点击右键就会报错~
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at textbook.TextBook$11.checkForTriggerEvent(TextBook.java:594)
at textbook.TextBook$11.mouseReleased(TextBook.java:589)
程序相关的程序是这个
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
jTextArea.setWrapStyleWord(true);
jTextArea.setLineWrap(true);
jTextArea.setFont(new Font("宋体", Font.PLAIN, 16));
jTextArea.addKeyListener( 
new KeyAdapter() { 
public void keyTyped(KeyEvent e) { 
getJTextArea();} 
}); 
jTextArea.addMouseListener(
    new MouseAdapter(){
     public void mousePressed(MouseEvent e)
     { 
      if(e.getButton()==MouseEvent.BUTTON3)
       checkForTriggerEvent(e);        
     }             
     public void mouseReleased(MouseEvent e)
     {       
      if(e.getButton()==MouseEvent.BUTTON3)
          checkForTriggerEvent(e); //589行
     }
     private void checkForTriggerEvent(MouseEvent e)
     {
      if(e.isPopupTrigger()){
       jPopupMenu.show(jTextArea, e.getX(), e.getY());}//594行
     }
    });
}
return jTextArea;
}
public JPopupMenu getJPopupMenu() {
if (jPopupMenu == null) {
jPopupMenu = new JPopupMenu();
jPopupMenu.setVisible(false);
jPopupMenu.add(getJMenuItemback2());
jPopupMenu.add(getJMenuItemcut2());
jPopupMenu.add(getJMenuItemcopy2());
jPopupMenu.add(getJMenuItempaste2());
jPopupMenu.add(getJMenuItemdelete2());
jPopupMenu.add(getJMenuItemall2());

}
return jPopupMenu;
}

解决方案 »

  1.   

    以下这句话不能在if语句块中,这样就会抛出空指针异常。应该在声明jTextArea的同时给其new一个地址空间jTextArea = new JTextArea(); 
      

  2.   

    at textbook.TextBook$11.checkForTriggerEvent(TextBook.java:594)
    at textbook.TextBook$11.mouseReleased(TextBook.java:589) 错误在这两行 看看
      

  3.   

    给参考一个  自己写的
    import java.awt.FileDialog;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JScrollPane;//加滚动条
    import javax.swing.JTextArea;public class Notepad implements ActionListener{
    JFrame jf = new JFrame("记事本");
    JTextArea jta = new JTextArea(10,20);//记事本,显示纯文本的多行区域

    public Notepad(){
    String[] menuLabel ={"文件", "编辑","帮助"};
    String[][] miLabel ={{"新建", "" ,  "打开",  "保存",  "另存","" , "退出"},
    {"撤销",  "剪切",  "复制",  "粘贴", " 删除", "","查找",  "替换", "" ,"全选"}, 
                   {" 关于记事本"} };
    JMenuBar jmb = new JMenuBar();
    for(int i=0;i<menuLabel.length;i++){
    JMenu jm = new JMenu(menuLabel[i]);
    jmb.add(jm);
      for(int j=0;j<miLabel[i].length;j++){
      if("".equals(miLabel[i][j])){
      jm.addSeparator();
      }else{
      JMenuItem jmi = new JMenuItem(miLabel[i][j]);
      jm.add(jmi);
      jmi.addActionListener(this);
      }
    }
      }
    jf.setJMenuBar(jmb);//JFrame加菜单栏时用setJmenuBar(),不用add
    jf.add(new JScrollPane(jta));//加滚动条
    jf.setLocation(300,300);//设计出现的位置 
    jf.setSize(400,400);
    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
    String comm = e.getActionCommand();
    if("新建".equals(comm)){
    jta.setText("");
    }else if("打开".equals(comm)){
    //FileDialog 类显示一个对话框窗口,用户可以从中选择文件
    //由于它是一个模式对话框,当应用程序调用其 show 方法来显示对话框时,
    //它将阻塞其余应用程序,直到用户选择一个文件
    FileDialog fd = new FileDialog(jf,"请选择要打开的文件",FileDialog.LOAD);
    fd.setVisible(true);
    //fd.show();

    }else if("保存".equals(comm)){


    }else if("另存".equals(comm)){


    }else if("退出".equals(comm)){


    }else if("撤销".equals(comm)){

    }else if("剪切".equals(comm)){

    }else if("复制".equals(comm)){

    }else if("粘贴".equals(comm)){

    }else if("删除".equals(comm)){

    }else if("查找".equals(comm)){

    }else if("替换".equals(comm)){

    }else if("全选".equals(comm)){

    }else{//关于记事本

    }
    }
    public static void main(String[] args) {
    new Notepad();
    }
    }
      

  4.   

    很简单If用错了:
    private JTextArea getJTextArea() { 
    if (jTextArea == null) { 
    jTextArea = new JTextArea(); 
    jTextArea.setWrapStyleWord(true); 
    jTextArea.setLineWrap(true); 
    jTextArea.setFont(new Font("宋体", Font.PLAIN, 16)); 
    jTextArea.addKeyListener( 
    new KeyAdapter() { 
    public void keyTyped(KeyEvent e) { 
    getJTextArea();} 
    }); 
    你是想如果没有,就new 一个,但是如果有的话,就不会执行下面的if,也就不会执行到getJTextArea();从而显示空指针异常,所以要把jTextArea.addKeyListener放到if从句外面。
    如下:
    if (jTextArea == null) { 
    jTextArea = new JTextArea(); 
    jTextArea.setWrapStyleWord(true); 
    jTextArea.setLineWrap(true); 
    jTextArea.setFont(new Font("宋体", Font.PLAIN, 16)); 
    }//if 从句到此结束
      

  5.   

    java.lang.NullPointerException 
    空指针异常
    看看这两行
    at textbook.TextBook$11.checkForTriggerEvent(TextBook.java:594) 
    at textbook.TextBook$11.mouseReleased(TextBook.java:589) 
      

  6.   

    程序没问题,是不是你按键有问题,看看这里……
    public void mousePressed(MouseEvent e) 
        { 
          if(e.getButton()==MouseEvent.BUTTON3) 
          checkForTriggerEvent(e);        
        }            
        public void mouseReleased(MouseEvent e) 
        {      
          if(e.getButton()==MouseEvent.BUTTON3) 
              checkForTriggerEvent(e); //589行 
        }