2011-04-28 3 views
2

I가 다음 코드 골격예외 처리 모험

try {  
...  
...  
sysout("Please provide an input: "); 
Thread.sleep(10000); //10 secs time given to the user to give the input. If the user doesn't enter the input it is throwing the exception, which is not being handled (with the custom message) 
interact(); //This is a method that belongs to **expectj.Spawn** class 
... 
...  
} catch (Exception e) { 

    System.out.println("You have not given any input!Please try again!"); 

} 

하지만 난 여전히 얻을 다음과 같은 출력 -

Exception in thread "ExpectJ Stream Piper" java.nio.channels.IllegalBlockingModeException 

at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:39) 
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:92) 
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:86) 
at java.io.InputStream.read(InputStream.java:85) 
at expectj.StreamPiper.run(StreamPiper.java:134) 

내가 처리 할 필요가 예외의 다른 어떤 종류가 있습니까?

+3

잡기와 동일한 스레드에서 예외가 발생 했습니까? – forsvarir

+0

나는 그렇게 생각한다. 그러나 나는 확실하지 않다. – hari

답변

0

스캐너가 BufferedReader보다 낫다고 생각합니다.

ExpectJ exp = new ExpectJ(10); 
String cmd = "sh test.sh"; 
Scanner sc = new Scanner(); 
Spawn s = exp.spawn(cmd); 
s.expect("Name"); 
String answer1 = sc.next(); 
s.send(answer1 + "\n); 
s.expect("Password"); 
String answer2 = sc.next(); 
s.send(answer2+"\n"); 
. 
. 
. 
//and so on... 
7

아니요, 은 Exception (몇 레벨 아래로)의 하위 클래스이므로 올바른 유형을 잡습니다. javadoc을 참조하십시오.

그러나 예외가 다른 스레드에서 throw되고있는 경우 try/catch 블록에서 예외가 표시 될 수 있습니다. Throw 된 예외가있는 스레드는 "ExpectJ Stream Piper"입니다.

+0

하지만 Stream Piper가 예외를 throw하는 이유는 interact()를 호출 할 때 시스템과 성공적으로 상호 작용할 수 있기 때문입니다. 이 메소드를 호출 한 후 상호 작용하지 않는 경우에만 런타임 중에 예외가 throw됩니다. 승인! 모든 예외가 다른 스레드에서 throw되는 경우 내 접근 방식은 무엇입니까? 나는 그런 상황을 한번도 경험하지 못했다. – hari

1

대신 상호 작용의, exception.So 없애려고 운이 없었다() 우리는 문자열로 입력을하고 전송()에 해당 문자열을 전달하는 의 BufferedReader를 사용할 수 있습니다. 더 편리합니다.

+0

샘플 코드를 제공하는 것이 가능한가? 나는 StreamPiper가 실패하여 같은 문제에 직면 해있다. bytes_read = inputStream.read (buffer); – Martin