黑马程序员技术交流社区

标题: 图形化界面中监听器的一个小问题 [打印本页]

作者: 沈文杰    时间: 2013-2-4 16:03
标题: 图形化界面中监听器的一个小问题
本帖最后由 沈文杰 于 2013-2-10 20:23 编辑

这是毕老师视频GUI视频中用Menu做一个类似记事本小程序中对于保存的监听器中代码的一部分,
if(file==null)
        {
          saveDir.setVisible(true);
         
          String dirPath = saveDir.getDirectory();
          String dirFile = saveDir.getFile();
          if(dirPath==null||dirFile==null)
           return ;
          file = new File(dirPath,dirFile);
        }
        
        try
        {
          BufferedWriter bw = new BufferedWriter(new FileWriter(file));
         
          String text = ta.getText();
         
          bw.write(text);
         
          bw.close();
        }
我想问下:这个if判断的file对象时,没有调用TextArea的方法啊,只在前面定义过一次
private File file;那么file 不是一直为空么?
作者: 沈文杰    时间: 2013-2-4 16:28
来个高手解答一下啊....
作者: 黄锦成    时间: 2013-2-6 14:36
在if判断到file为null时,会进入if代码块,在代码块里面有为file赋值的语句 file = new File(dirPath,dirFile);

作者: 沈文杰    时间: 2013-2-7 13:07
黄锦成 发表于 2013-2-6 14:36
在if判断到file为null时,会进入if代码块,在代码块里面有为file赋值的语句 file = new File(dirPath,dirFi ...

if(file==null)
        {
          saveDir.setVisible(true);

        }
try....你说的是为空的情况。
能讲下如果是file不为空,这个不为空的情况是怎么判断的,
我们没有获取过file,从什么地方知道file不为空??

作者: 蒋立辉    时间: 2013-2-7 19:52
要想执行下面的语句,必须有个file来进行写入。第一次监听到事件的时候,file肯定是null的,因为只在前面定义而没有new出来,这是后进入if判断语句
  1. saveDir.setVisible(true);
  2.          
  3.           String dirPath = saveDir.getDirectory();
  4.           String dirFile = saveDir.getFile();
  5.           if(dirPath==null||dirFile==null)
  6.            return ;
  7.           file = new File(dirPath,dirFile);
复制代码
这个语句显示一个保存界面,然后根据用户选择的dirPath和dirFile来new出一个file实例: file = new File(dirPath,dirFile)

当第二次监听到事件的时候,由于第一次已经选择了文件保存路径,file已经实例化过了,这时候就不再进入if语句,直接进入下面的try语句。


所以这个file为不为空,实际上就是第一次执行这段监听代码的时候为空,第二次不为空。
作者: 沈文杰    时间: 2013-2-10 20:07
蒋立辉 发表于 2013-2-7 19:52
要想执行下面的语句,必须有个file来进行写入。第一次监听到事件的时候,file肯定是null的,因为只在前面定 ...

噢噢,谢谢哈




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