黑马程序员技术交流社区

标题: 自己编写的记事本 为什么打开文件时有个BUG怎么解决? [打印本页]

作者: 仙兒哥    时间: 2013-4-8 19:59
标题: 自己编写的记事本 为什么打开文件时有个BUG怎么解决?
本帖最后由 仙兒哥 于 2013-4-10 10:58 编辑

以下是打开文件的代码 :
//打开按钮
                MenuItem mntmNewItem_1 = new MenuItem(menu_1, SWT.NONE);
                mntmNewItem_1.setText("打开");
               
                //打开文件
                mntmNewItem_1.addSelectionListener(new SelectionAdapter() {
                        public void widgetSelected(SelectionEvent e) {
                                        FileDialog dialog = new FileDialog(getShell());
                                        dialog.setFilterExtensions(new String[]{"*.txt","*.java","*.doc"});
                                        String filePath=dialog.open();
                                       
                                        try {
                                                File file =new File(filePath);
                                                FileReader fileReader = new FileReader(file);
                                                BufferedReader reader = new BufferedReader(fileReader);
                                                String line=null;
                                                StringBuffer buffer=new StringBuffer();
                                                while((line=reader.readLine())!=null){
                                                        buffer.append(line);
                                                        buffer.append("\n");
                                                }
                                                text.setText(buffer.toString());
                                                fileReader.close();
                                        }  catch (IOException e1){
                                                // TODO 自动生成 catch 块
                                                
                                        }
                                       
                        }
                });

当我打开时点叉Eclipse就会报错

这是报错的截图:



作者: 梁航斌    时间: 2013-4-8 20:08
本帖最后由 梁航斌 于 2013-4-8 20:13 编辑

毕老师的视频里面有说这个问题,是因为文件没有文件名。所以会报空指针。我在你截的图里也看到了,你去改改,加个判断吧

作者: 仙兒哥    时间: 2013-4-10 00:12
梁航斌 发表于 2013-4-8 20:08
毕老师的视频里面有说这个问题,是因为文件没有文件名。所以会报空指针。我在你截的图里也看到了,你去改改 ...

额 谢谢 还是有点晕 详细的 代码有么 谢了 哥们
作者: 梁航斌    时间: 2013-4-10 10:17
本帖最后由 梁航斌 于 2013-4-10 10:18 编辑

我自己也写了个测试Demo,你的问题在打”*“号解决了。你可以运行一下我的测试Demo.再试着把判断去掉就会知道详细的原因了。
MenuItem mntmNewItem_1 = new MenuItem(menu_1, SWT.NONE);
                mntmNewItem_1.setText("打开");
               
                //打开文件
                mntmNewItem_1.addSelectionListener(new SelectionAdapter() {
                        public void widgetSelected(SelectionEvent e) {
                                        FileDialog dialog = new FileDialog(getShell());
                                        dialog.setFilterExtensions(new String[]{"*.txt","*.java","*.doc"});
                                        String filePath=dialog.open();
                                        //在获取后加判断,如果为空则跳出。不这样做的话,后面程序如果继续以名字封装File对象后,就会报空指针异常.
                                       //*********************************************
                                       if(filePath==null)                                                      return;
                                       //*********************************************
                                       
                                        try {
                                                File file =new File(filePath);
                                                FileReader fileReader = new FileReader(file);
                                                BufferedReader reader = new BufferedReader(fileReader);
                                                String line=null;
                                                StringBuffer buffer=new StringBuffer();
                                                while((line=reader.readLine())!=null){
                                                        buffer.append(line);
                                                        buffer.append("\n");
                                                }
                                                text.setText(buffer.toString());
                                                fileReader.close();
                                        }  catch (IOException e1){
                                                // TODO 自动生成 catch 块
                                                
                                        }
                                       
                        }
                });
不好意思啊,上班赶时间也就没怎么注释,希望你看得懂,谢了哈{:soso_e113:}
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.io.*;
  4. class Demo
  5. {
  6.         private Frame f;
  7.         private MenuBar mb;
  8.         private Menu m;
  9.         private MenuItem mi;
  10.         private        FileDialog fd;

  11.         Demo(){
  12.                 ini();
  13.         }
  14.         public void ini(){
  15.                 f = new Frame();
  16.                 f.setLayout(new FlowLayout());
  17.                 f.setBounds(300,200,200,200);
  18.                 fd = new FileDialog(f, "保存",FileDialog.LOAD);
  19.                 //fd.setVisible(false);
  20.                 mb = new MenuBar();
  21.                 m = new Menu("菜单");
  22.                 mi = new MenuItem("保存");
  23.                 m.add(mi);
  24.                 mb.add(m);
  25.                 f.setMenuBar(mb);
  26.                 f.setVisible(true);
  27.                 event();
  28.         }
  29.         public void event(){
  30.                 mi.addActionListener(new ActionListener(){
  31.                         public void actionPerformed(ActionEvent e){
  32.                                 fd.setVisible(true);
  33.                                 String file = fd.getFile();
  34.                                 //在获取后加判断,如果为空则跳出。不这样做的话,后面程序如果继续以名字封装File对象后,就会报空指针异常
  35.                                 if(file==null)
  36.                                         return;
  37.                                 System.out.println(file);
  38.                         }
  39.                 });
  40.         }
  41.         public static void main(String []args){
  42.                 new Demo();
  43.         }
  44. }
复制代码

作者: 仙兒哥    时间: 2013-4-10 10:58
梁航斌 发表于 2013-4-10 10:17
我自己也写了个测试Demo,你的问题在打”*“号解决了。你可以运行一下我的测试Demo.再试着把判断去掉就会知 ...

谢了 大哥 完全解决问题了 呵呵 :'(非常感谢呀 等我都做完 我会发布SWT的包 和 这个源代码的 呵呵




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2