这是个简单的记事本程序,还没完成,在进行右键菜单设置时出现问题~~~求助各位高手啊~~~
运行时点击右键就会报错~
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;
}
运行时点击右键就会报错~
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;
}
at textbook.TextBook$11.mouseReleased(TextBook.java:589) 错误在这两行 看看
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();
}
}
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 从句到此结束
空指针异常
看看这两行
at textbook.TextBook$11.checkForTriggerEvent(TextBook.java:594)
at textbook.TextBook$11.mouseReleased(TextBook.java:589)
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行
}