В моей программе я подключаюсь к процессу переводчика для другого языка. Мне иногда нужна программа, чтобы спросить переводчика о нескольких вещах и использовать ее ответ.
Процесс сохраняется в переменной IProcess, и связь осуществляется через IStreamsProxy процесса. чтобы получить ответ, я добавил IStreamListener в IStreamsProxy.
Однако, когда я пишу в IStreamsProxy (с помощью метода write ()), мне нужен код для ожидания ответа, например, метод streamAppend вызываемого слушателя.
Я пытался использовать методы wait () и notify (), но я не знаю, по каким объектам я должен их вызывать.
Класс запроса, который делает сообщение, вызывает метод, подобный этому:
/**
* Sends a command to the interpreter. Makes the current thread wait for an answer of the interpreter.
* @throws IOException
*/
private synchronized void send(String command) throws IOException{
this.s48Proxy.write(command);
try {
System.out.println("waiting for reply");
this.wait();
} catch (InterruptedException e) {
System.out.println("interruption exception: "+e.getMessage());
}
}
и слушатель:
private class Listener implements IStreamListener {
private Query query;
public Listener(Query query) {
super();
this.query = query;
}
@Override
public void streamAppended(String arg0, IStreamMonitor arg1) {
System.out.println("got interpreter answer");
query.setCurrentOutput(arg0.substring(0, arg0.lastIndexOf("\n")).trim());
query.notify();
}
}
Метод streamAppend()
вызывает метод notify()
для класса запросов. Однако это не работает. «Ожидание ответа» - последний ответ, который я получаю.
Как я могу это сделать? Или есть какие-то другие методы, которые я мог бы использовать для достижения этого автоматически?