2016-08-11 16 views
-2

私は以下のコードを持っています。私は問題の原因を見つけることができません。スレッド "main"の例外java.io.Fileのjava.lang.StackOverflowError。 <init>(不明な情報源)

public class ConsoleApp1 { 
    public static void main(String[] args) { 
     allFiles("C:\\"); 
    } 

    private static void allFiles(String root) { 

     File ro = new File("e:\\"); 
     File[] flist = ro.listFiles(); 

     for (File i: flist) { 
      if (i.isFile()) { 
       System.out.println(i.getAbsolutePath()); 
      } else { 
       allFiles(i.getAbsolutePath()); 
      } 
     } 
    } 
} 

私は将来、このアプリケーションをスイングする追加しように、ボタンから呼び出しがリストを取得し、その上の任意のアドバイスも役立つだろうJTreeにそれらを移植しますよ。

+0

ここで、** String root **を使用しました。あなたは常に** "e:\\" **からファイルのリストを取得します。このため、現在のインフィニティコール – subash

答えて

4

あなたはE:\でファイルコンストラクタを再帰的に呼び出しています。無限ループのため、最終的にstackoverflowのエラーが発生します。コンストラクタ引数を変更してroot変数を使用するように変更します。

private static void allFiles(String root) { 
    File ro = new File(root); 
    File[] flist = ro.listFiles(); 

    for(File i : flist){ 
     if(i.isFile()) { 
      System.out.println(i.getAbsolutePath()); 
     } 
     else { 
      allFiles(i.getAbsolutePath()); 
     } 
    } 
} 
+0

ルート変数で、nullポインタ例外をスローしました。 – Ak47

+0

@ Ak47完全なスタックトレースでurの質問を更新してください。また、http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it – sidgate

+0

を見てください。問題は、私が使用するたびにパスの '\'のために発生しましたgetAbsolutePath()関数助けてくれてありがとう。 – Ak47

関連する問題