2014-10-20 1 views
1

while 루프가 반복 될 때마다 예외 처리가 수행됩니다. 어떤 이유로 예외를 throw하는 조건이 true이면 예외 메시지가 표시되지만 프로그램은 중단없이 계속 실행됩니다. 전에는 이런 일이 일어난 것을 본 적이 없으며 while 루프 때문인 것으로 의심됩니다. 나는 반드시 내 큐에서 null 객체의 존재에 대한 모든 반복을 확인해야합니다. Another thread suggested using a try clause, try 절을 사용하도록 코드를 변경했지만 여전히 동일한 문제가 발생합니다. 예외가 발생하지만 프로그램이 중단되지 않습니다. 이 원인은 무엇입니까?Java : throwing exception 후에 프로그램이 중단되지 않습니다.

Purchase ownedShares; 
while (numSharesToSell > 0) { 
    try { 
    ownedShares = q.peek(); 
    } 
    catch(NullPointerException ex) { 
    throw new IllegalArgumentException("Not enough shares"); 
    } 

EDIT 2

저작물 않는 IsEmpty 함수()를 사용 :

Purchase ownedShares; 
while (numSharesToSell > 0) { 
    if (q.isEmpty()) 
    throw new IllegalArgumentException("Not enough shares"); 
    else 
    ownedShares = q.peek(); 
// try { 

여기서 코어 오류 예외가 실행되지 않는 것이 없다. 현재 실행 중이며 "공유가 충분하지 않습니다"라는 메시지가 인쇄됩니다. 문제가 발생하면 프로그램이 중단되지 않습니다. 외부 루프가 계속됩니다.

편집 3 :

내가 프로그램을 충돌에서 내가 던져 오류를 방지하는 try/catch 블록에 싸여 수정하고 메서드 호출. 이로 인해이 코드의 스켈레톤 클래스를 준 사람이 예외로 인해 프로그램을 중단시키지 않기를 바랍니다.

+1

'numSharesToSell'이 0보다 큰 경우'numSharesToSell'을 업데이트 한 부분을 생략하지 않는 한 무한 루프가있는 것처럼 보입니다. – nem035

+1

@nem - 부정확합니다. 'q'가 null이고'q'가 비어있는 것은 두 가지 다른 것들입니다. 'q'가 비어 있다면이 라인은 NPE를 던지지 않을 것이고'ownedshares'는 단지 null이 될 것입니다. 'q'가 null의 경우에만, NPE가 슬로우됩니다. – drewmoore

+0

@drewmoore 나는 그 사람을 오해하고, 덧글 – nem035

답변

3

예외 메시지가 인쇄되고 있지만 프로그램이 충돌하지 않으면 호출 스택의 어딘가에있는 코드가 해당 예외를 catch하고 메시지를 인쇄 한 다음이를 삼키고 있음을 의미합니다. 즉, 어딘가에 호출자에 try-catch 블록이 있습니다.

디버거를 사용하여 루프 내부를 분해하고 호출 스택을 살펴본 다음 모든 호출 함수의 코드를 검사하여 try-catch을 찾아야합니다.

관련 문제