Исключение Обработка Приключения - PullRequest
2 голосов
/ 28 апреля 2011

У меня есть следующий код скелета

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 ]

7 голосов
/ 28 апреля 2011

Нет, IllegalBlockingModeException - это подкласс Exception (на пару уровней ниже), так что вы ловите правильный тип.См. javadoc .

Однако, возможно, исключение выдается из другого потока, в этом случае вы не увидите его в блоке try / catch.Поток, для которого выброшено исключение: "ExpectJ Stream Piper".

1 голос
/ 11 мая 2011

Не было удачи, пытаясь избавиться от исключения. Так что вместо взаимодействовать () мы можем использовать bufferedreader , чтобы взять ввод в строку и передать эту строку отправить () . Это удобнее.

0 голосов
/ 22 августа 2011

Я думаю, что сканер лучше, чем 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...
...