java让一个方法等待另一个进程的响应

标签 java process response wait

在我的程序中,我连接到另一种语言的解释器进程。有时我需要程序向解释器询问一些事情并使用它的响应。

进程存储在 IProcess 变量中,并且通过进程的 IStreamsProxy 完成通信。为了接收响应,我向 IStreamsProxy 添加了一个 IStreamListener。

但是,当我写入 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() 方法。然而,这是行不通的。 “等待回复”是我收到的最后一条回复。

我该怎么做?或者我可以使用任何其他方法来自动实现此目的吗?

最佳答案

您可以使用Object#waitObject#notifiy

// @ IStreamsProxy
synchronized( someMonitor ) {
  someMonitor.wait( /* time? */ );
}

// @ Listener
synchronized( someMonitor ) {
  someMonitor.notify();
}

-> Javadoc Link

关于java让一个方法等待另一个进程的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7713786/

相关文章:

mysql - 无法更新记录,卡住

java - 如何轻松插入对象化数据库

java - 将电子邮件作为参数传递给 SQL 查询、PostreSQL、JAVA

python - 如何在可接受的时间内让所有正在运行的 Python 进程在 Windows 下运行?

java - 如何在 Java 中将类显示为 JSON 响应?

java - 从 http GET 响应获取图像作为 base64 字符串

javascript - POST请求后,不要进入成功回调(javascript)

Java - Spring AOP 切入点不起作用

java - 关闭当前窗口并打开上一个窗口?

c++ - 在进程之间共享类实例的方法