2013-10-19 1 views
0

난이 멍청한 놈 질문이 있다면 모르겠지만 내 코드 :후 Scanner.hasNext()

void process() { 
    ... 
    while (input.hasNext()) { 
     \\ DO WHATEVERITNEEDSTODO 
    } 
    out.close(); 
    ... 
} 

이 수행하는 동안 문에서 모든하지만, 나중에는 계속하지 않고, 따라서 닫히지 않습니다. 간단한 체크로 out.close() 대신 System.out.println ("Hello hello")을 넣을 때도 "Hello hello"가 출력되지 않습니다.

기본적으로 out.close를 시도하고 있습니다.() 내 입력이 모든 것을 통과 한 후에 일어난다. 이것을 할 또 다른 방법이 있습니까?

+0

우리는'while'의 코드가 무엇인지 알아야 할 것입니다. –

+2

'input.hasNext()'는 false를 반환합니까? 그렇지 않은 경우 루프에 영원히 머물러있게됩니다. – Gerald

+0

"input.hasNext()"에 대한 코드를 표시하십시오. –

답변

0

the docs for hasNext() "이 방법은 입력을 기다리는 동안 차단 될 수 있습니다." 나는 결코 끝나지 않는 어떤 종류의 입력 (예를 들어, System.in?)에서 스캐너를 실행하고 있다고 생각합니다. 따라서 루프의 본문이 실행되는 것을 볼 수 있지만 결국에는 처리 할 물건이 부족하여 "다음"이 될지 여부를 영원히 기다립니다.

다른 말로하면 스캐너의 기본 스트림에서 현재 읽을 수있는 것이 없기 때문에 결코 존재하지 않을 것임을 의미하지는 않습니다. 스트림이 열려있는 한 더 많은 콘텐츠가 결국 읽을 수있게됩니다.