0

実行したいときにこのエラーが発生します:

スレッド「メイン」での例外 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();


        }
        }

    }




        }
    }
4

3 に答える 3

1

x.listFiles();(ではない)nullのために戻りますfiledirectory

listFiles()

nullこの抽象パス名がディレクトリを示さない場合、または I/O エラーが発生した場合に戻ります。

したがって、両方のループの前に、以下のような無効チェックを追加します

if(files!=null){

}
于 2012-08-07T18:56:24.740 に答える
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ファイルはディレクトリであると想定しても安全だと思いますが、そこでも同じことができます

于 2012-08-07T18:58:31.067 に答える
1

file.isDirectory()電話をかける前に必ず確認してくださいfile.listFiles()

于 2012-08-07T19:01:51.053 に答える