A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张亚青 中级黑马   /  2013-3-23 16:24  /  1626 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

需求:显示一个Frame窗口,其中包括三个组件:文本框TextField类型tf、文本区域TextArea类型ta和按钮Button类型but,在tf文本框中输入目录路径path,点击按钮but,在文本区区域内会显示path下的所有目录和文件。

其中用到了File对象时,有个try..catch 语块,出现了一点疑问,代码如下(问题写在了代码中):



  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.io.*;
  4. /**



  5. */
  6. class MyFrameTest
  7. {
  8.         public static void main(String[] args)
  9.         {
  10.                 new MyFrame();
  11.         }
  12. }

  13. class MyFrame
  14. {
  15.         private Frame f;
  16.         private TextField tf;
  17.         private Button but;
  18.         private TextArea ta;

  19.         MyFrame()
  20.         {
  21.                 init();
  22.         }

  23.         private void init()
  24.         {
  25.                 f=new Frame("my window");
  26.                 f.setBounds(300,100,600,500);
  27.                 f.setLayout(new FlowLayout());

  28.                 tf=new TextField(60);
  29.                 but=new Button("转到");

  30.                 ta=new TextArea(25,70);
  31.                 ta.setEditable(false);

  32.                 f.add(tf);
  33.                 f.add(but);
  34.                 f.add(ta);
  35.                

  36.                 addListeners();
  37.                 f.setVisible(true);


  38.         }

  39.         private void addListeners()
  40.         {
  41.                 f.addWindowListener(new WindowAdapter()
  42.                 {
  43.                         public void windowClosing(WindowEvent e)
  44.                         {
  45.                                 System.exit(0);
  46.                         }

  47.                 });


  48.                 but.addActionListener(new ActionListener()
  49.                 {
  50.                         public void actionPerformed(ActionEvent e)
  51.                         {
  52.                                 String path=tf.getText();
  53.                                 String [] dirs=null;
  54.                                 ta.setText(null);
  55.                                 try
  56.                                 {
  57.                                         System.out.println(path.equals(null));
  58.                                         File f=new File(path);
  59.                                         dirs=f.list();

  60.                                 }
  61.                                 catch (NullPointerException npe)
  62.                                 {
  63.                                         System.out.println("发生空指针异常");
  64.                                         ta.append("输入路径"+path+"不合法,请重新输入");
  65.                                 }


  66.                                 /**
  67.                                 *问题出现在上面的try语句里,查看API发现,new File的时候会抛出空指针异常
  68.                                 *然而当在文本框tf里什么都不输入的前提下,直接点击按钮,这时path=null,try语句抛出异常被catch捕获,然后执行catch语句
  69.                                 *在文本区域fa应该会显示:"输入路径"+path+"不合法,请重新输入",
  70.                                 *可是为什么catch没有执行??????????
  71.                                 */
  72.                                 ta.append("----路径"+path+"下目录和文件----");
  73.                                 if (dirs!=null)
  74.                                 {
  75.                                         for(String s:dirs)
  76.                                                 ta.append(s+"\n");

  77.                                 }

  78.                         }
  79.                 });

  80.         }

  81.        
  82. }


复制代码

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-24 07:27

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

1 个回复

倒序浏览
本帖最后由 谢洋 于 2013-3-23 17:14 编辑

你的程序根本就没发生异常,你可以做一个测试:直接让path=null;这样就会抛异常了:path不指向任何空间

File
public File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。如果给定字符串是空字符串,那么结果是空抽象路径名。


  • 参数:
  • pathname - 路径名字符串
  • 抛出:
4 NullPointerException - 如果 pathname 参数为 null


                                String path=tf.getText();//path已指向tf储存内容的空间,只是该空间没有装东西而已,并非path没有分配到空间
                                String [] dirs=null;
                                ta.setText(null);
                                try
                                {
                                  System.out.println(path.equals(null));//false,表明path不等于null(null不指向任何空间),path已有所指向(分配空间)
                                        File f=new File(path);//path!=null当然不后抛NullPointerException
                                        dirs=f.list();

                                }catch (NullPointerException npe){
                                        System.out.println("发生空指针异常");
                                        ta.append("输入路径"+path+"不合法,请重新输入");
                                }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马