线程“main”java.lang.NullPointerException中的异常,不知道我做错了什么

时间:2012-08-07 18:54:57

标签: java exception nullpointerexception

当我想要运行它时出现此错误:

  

线程“main”中的异常java.lang.NullPointerException

在这一行

for (File y: childfiles){   )

但奇怪的是,这取决于我选择的方向是否有效

   import java.util.*;
    import java.io.*;
    import java.lang.System;

    public class mainclass {
        public static void main(String[] args) throws IOException, InterruptedException{

    String path = null; 
            Scanner scan = new Scanner(System.in);
            System.out.println("enter path:");
            path = scan.nextLine();

    File dir = new File(path);

    File[] files = dir.listFiles();


    for(File x : files){

        System.out.println(x);
        File[] childfiles = x.listFiles();
        for (File y: childfiles){


        if(y.toString().endsWith(".exe")){



           Process p = Runtime.getRuntime().exec(

                   y.toString());
                    p.waitFor();


                    System.out.println(y.toString()+" executed, press enter for next exe");
                    scan.nextLine();


        }
        }

    }




        }
    }

3 个答案:

答案 0 :(得分:1)

x.listFiles();null返回file(不是directory

listFiles()

  

如果此抽象路径名不表示目录,或者发生I / O错误,则返回null

所以在你的两个循环之前添加一个无效检查,如下所示

if(files!=null){

}

答案 1 :(得分:1)

如果x不是目录,则listFiles返回null值。您应该更改代码以添加对此的检查:

for(File x : files){

    System.out.println(x);
    if(! x.isDirectory() )
        continue;
    File[] childfiles = x.listFiles();
        //or add a null check
    if(childFiles != null)
        for (File y: childfiles){
            ...

我认为先前假设dir文件是一个目录是安全的,但你可以在那里做同样的事情

答案 2 :(得分:1)

在致电file.isDirectory()之前,请务必先检查file.listFiles()