2013-02-15 5 views
3

I 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[] 배열에서의 위치를 ​​취하고, 그 위치의 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) throw되어야합니다. 그런 다음 출력은 예외가 발견되면 루프가 종료 될 때까지 프로그램이 계속 실행됨을 의미합니다.

이 동작을 이해하지 못합니다. 처리되지 않은 예외가 발생하면 프로그램이 단순히 종료되지 않는 이유는 무엇입니까? 또한 예외 메시지를 호출하는 줄 앞에 예외 메시지가 나타나는 이유는 무엇입니까? System.out.printlntry 블록 앞에옵니다.

마지막으로, 왜 이렇게 이상한 방식으로 오류가 분할됩니까? 오류 메시지가 나타나면 프로그램이 실행을 계속 한 후 세부 정보가 나타납니다. 플랫폼은 NetBeans 7.2입니다.

+0

@BheshGurung는 이미 – Zyerah

답변

3

이렇게 배치 된 방식은 프로그램이 (0,3)에 도달했을 때 예외가 발생했음을 암시하는 것처럼 보이지만 예외가 발생했을 때 (1,1) throw되어야합니다. 그런 다음 출력은 예외가 발견되면 루프가 종료 될 때까지 프로그램이 계속 실행됨을 의미합니다.

캐치되지 않는 예외에 대한 기본 동작은 표준 오류 스트림 (System.err)에 인쇄하는 것입니다. 표준 출력 스트림 (System.out)과 다른 순서로 콘솔에 표시 할 수 있습니다.

이 동작을 이해하지 못합니다. 처리되지 않은 예외가 발생하면 프로그램이 단순히 종료되지 않는 이유는 무엇입니까? 또한 예외 메시지를 호출하는 줄 앞에 예외 메시지가 나타나는 이유는 무엇입니까? System.out.println은 try 블록 앞에옵니다.

이것은 MapGrid.MapGrid.getAdjacentOfType의 작업 방식에 달려 있습니다. 예외를 잡아 내고 표준 오류로 인쇄하는 Exception.printStackTrace()을 호출하는 것 같습니다.

마지막으로, 왜 이렇게 이상한 방식으로 오류가 나뉘어 집니까? 오류 메시지가 나타나면 프로그램이 실행을 계속 한 후 세부 정보가 나타납니다. 플랫폼은 NetBeans 7.2입니다.

출력과 오류 스트림이 반드시 콘솔에 표시되는 순서가 서로 같기 때문에 (서로 상대적으로) 콘솔에 표시되지 않습니다.

+0

작은 세부 사항이 문제를 해결하지만, catch 블록은 실제로는 ClassCastException을 위해 캐치하지 않습니다. 그 이외에, 스포트! 최대한 빨리 줄 것입니다. 고맙습니다! – Zyerah