2016-03-31 40 views
0

私はJavaFxを使ってリストにアイコンを表示するプログラムで作業しています。 txtドキュメントから特定のIDを検索するために使用される静的クラスを作成しました。もともと、静的ブロックは、各行に定義された項目のIDと名前を追加しますが、これらの問題が発生したため、問題の原因を見つけようとしました。Java:プログラムが読むときにtxtファイルの内容を表示することができません

代わりに、私はちょうど静的ブロックのテキストファイルの内容を見て、それをコンソールに出力しました。

これは、参考のために私のコードです:

public class ItemIds { 
    public static int UNDEFINED_ID = -1; 
    private static HashMap<String, Integer> items; 
    static { 
     items = new HashMap<String, Integer>(); 
     System.out.println(new File("res/ids/item ids.txt").exists()); 
     try { 
      //should print out every line in the text file 
      Files.lines(Paths.get("res/ids/item ids.txt")).forEach(s -> { 
       System.out.println(s); 
      }); 
     } catch (IOException e) { 
      System.out.println("Unable to read specified file."); 
      e.printStackTrace(); 
     } 
    } 

    public static int getId(final String name) { 
     final Integer id = items.get(name); 
     return id != null ? id : UNDEFINED_ID; 
    } 
} 

はしかし、私はこの静的クラスが初期化されるのですかと静的ブロックが呼び出されることは非常に奇妙です。エラーが発生していないすべての単一の行を、行10691に到達するまで「行内の例外」JavaFXアプリケーションスレッド「java.lang.ExceptionInInitializerError」をスローするまでリストします。

これは特に奇妙なことですが、小さなテキストドキュメント(少ないエントリ)で作業すると、すべて正常に動作しているようです。ファイルはほぼ14000行から構成されているため、作業できるようにするには〜4000行を削除する必要があります。

これを行う理由は何ですか?ご意見はありがとうございます - ありがとうございます

+1

stacktrace全体をお待ちください... – Seelenvirtuose

+0

モデルクラスの静的ブロックにファイル集中型コードを置くのはなぜですか?それが正しく初期化された後、あなたのUIからそのコードを適切に呼び出すだけではどうですか? – ManoDestra

+0

@ManoDestra [bamboozling intensifies] – flakes

答えて

0

私はこのエラーを再現できません。私は18K行のファイルを作成しており、プログラムはそれでうまく動作します。したがって、ファイルとスタックトレースを確認することを検討してください。

今すぐあなたの例外 ExceptionInInitializerErrorに戻ってくる、次のことが可能です:予期しない例外が静的初期化子内で発生した

ExceptionInInitializerError信号。 ExceptionInInitializerErrorは、静的イニシャライザまたは静的変数のイニシャライザの評価中に例外が発生したことを示すためにスローされます。

class ItemIds 
{ 
    static 
    { 
    // if something does wrong -> ExceptionInInitializerError 
    } 
} 

静的変数は静的ブロックで初期化されるため、エラーが発生する可能性もあります。例:

class ItemIds 
{ 
    static int v = D.foo(); 
} 

=>

class ItemIds 
{ 
    static int v; 

    static 
    { 
    v = D.foo(); 
    } 
} 

ので、fooの場合は()あなたはExceptionInInitializerErrorを得ることができ狂います。

完全なコードを静的ブロックで提示しましたか?

関連する問題