forループがあります:
for(Location l : locs) {
System.out.println("X:"+l.getX()+", Y:"+l.getY());
try {
if(layer.getObject(l) != null)
out.add(layer.getObject(l));
} catch(NullPointerException e) {
}
}
反復ごとに、Location[]
配列からLocationを取得し、その場所のXとYを出力します。次に、次の行は、(標準のマップライブラリではなく)マップレイヤー内の場所からオブジェクトを取得し、それをに追加しますArrayList
。
を取得してjava.lang.ClassCastException
いますが、それは私の質問ではありません。その問題は私が自分で解決することができます。私の質問は、出力が次のように表示される理由です(特に、例外の表示方法)。
run:
X:0, Y:1
X:0, Y:2
X:0, Y:3
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LMapGrid.OverlayObject;
X:1, Y:1
X:1, Y:3
X:2, Y:1
X:2, Y:2
X:2, Y:3
at MapGrid.MapGrid.getAdjacentOfType(MapGrid.java:86)
at BehaviorMap.BehaviorMap.main(BehaviorMap.java:26)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
検出されたオブジェクトは場所(1,1)にあるため、場所(1,1)で例外がスローされました。プログラムの最初から設定します。プログラムはメインスレッドで実行されています。しかし、私の質問は、なぜ出力がこのように表示されるのかということです。
これがレイアウトされている方法は、プログラムが(0,3)に達したときに例外がスローされたことを意味しているように見えますが、(1,1)に達したときに例外がスローされたに違いありません。次に、出力は、例外が検出されると、ループが終了するまでプログラムが実行を継続したことを意味します。
私はこの振る舞いを理解していません。未処理の例外が発生した場合、なぜプログラムは単に終了しないのですか?さらに、例外を呼び出す行の前に例外メッセージが表示されるのはなぜですか?ブロックのSystem.out.println
前に来ることに注意してください。try
最後に、なぜエラーがそのような奇妙な方法で分割されるのですか?(エラーメッセージが表示され、プログラムが実行を継続しているように見えた後、詳細が表示されます。)プラットフォームはNetBeans7.2です。