Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

时间:2023-01-26 21:48:12

GUI练习:文件的打开保存

import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class MyMenuDemo {

    private Frame f;
    private MenuBar mb;
    private TextArea ta;
    private Menu m;
    private MenuItem closeItem,openItem,saveItem;

    private FileDialog openDia,saveDia;

    private File file;

    public MyMenuDemo()
    {
        init();
    }

    public void init()
    {
        f=new Frame("my window");
        f.setBounds(200, 100, 500, 400);

        ta=new TextArea();
        mb=new MenuBar();
        m=new Menu("文件");
        //subMenu=new Menu("子菜单");
        openItem=new MenuItem("打开");
        saveItem=new MenuItem("保存");
        closeItem=new MenuItem("关闭");
        mb.add(m);
        m.add(openItem);
        m.add(saveItem);
        m.add(closeItem);
        //subMenu.add(subItem);

        f.add(ta);
        f.setMenuBar(mb);
        f.setVisible(true); 
        myEvent();
    }

    public void myEvent()
    {
        openItem.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub

                openDia.setVisible(true);
                String pathDir=openDia.getDirectory();
                String fileName=openDia.getFile();
                if(pathDir==null || fileName==null)
                    return ;

                file=new File(pathDir,fileName);

                try {
                    BufferedReader bufr=new BufferedReader(new FileReader(file));

                    ta.setText(null);

                    String line=null;
                    while((line=bufr.readLine())!=null)
                    {
                        ta.append(line+"\r\n");
                    }

                    bufr.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    throw new RuntimeException("读取失败");
                }
            }
        });

        saveItem.addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                saveDia.setVisible(true);
                if(file==null)
                {

                String pathDir=saveDia.getDirectory();
                String fileName=saveDia.getFile();
                if(pathDir==null || fileName==null)
                    return ;
                file=new File(pathDir,fileName);                    
                }
                try {
                    BufferedWriter bufw=new BufferedWriter(new FileWriter(file));

                    String text=ta.getText();
                    bufw.write(text);
                    bufw.flush();
                    bufw.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }   
            }

        });

        f.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });

        closeItem.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        new MyMenuDemo();
    }
}

程序运行,但是点击打开保存条目时报错如下:
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at MyMenuDemo 1.actionPerformed(MyMenuDemo.java:54)atjava.awt.MenuItem.processActionEvent(UnknownSource)atjava.awt.MenuItem.processEvent(UnknownSource)atjava.awt.MenuComponent.dispatchEventImpl(UnknownSource)atjava.awt.MenuComponent.dispatchEvent(UnknownSource)atjava.awt.EventQueue.dispatchEventImpl(UnknownSource)atjava.awt.EventQueue.access 400(Unknown Source)
at java.awt.EventQueue 3.run(UnknownSource)atjava.awt.EventQueue 3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain 1.doIntersectionPrivilege(UnknownSource)atjava.security.ProtectionDomain 1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue 4.run(UnknownSource)atjava.awt.EventQueue 4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

查找54行openDia,未对其进行实例化,在第27、28行加入
openDia = new FileDialog(f);
saveDia = new FileDialog(f);

再次运行,程序正确,可以对其进行正确文件打开关闭以及保存操作。
1.点击打开:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

2.选择1.txt文件打开:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

3.修改文档内容如下:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

4.点击保存之后,直接打开1.txt文件如下:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

修改保存成功!!!!