有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

我是否可以将Java的BufferedReader与事件侦听器一起使用,而不是while(true)?

我正在编写一个Java客户机和服务器,它们之间的对话都是正确的。然而,目前,客户端必须始终先向服务器发送消息,然后才能接收消息——但我希望服务器能够在客户端不要求的情况下发送消息

在我的主要语言AS3中,我会在socket中添加一个事件侦听器,并以这种方式处理数据——但我似乎无法找到在Java中如何做到这一点

目前,我的客户机中包含以下代码:

public String send(String message) {
    out.println(message);
    try {
        return in.readLine();
    } catch (IOException ex) {
        return "";
    }
}

基本上我调用它,传递我的消息,它返回给我服务器的响应。 我不想这样做,而是想在那里发送一条消息,如下面所示,并让响应在不同的地方(由事件侦听器)拾取

public void send(String message) {
    out.println(message);
}

由于我不知道事件侦听器是如何工作的,我确实考虑过使用一个单独的线程来运行while(true){in.readLine;},但如果可能的话,我想避免这种情况;我对线程不太熟悉,我想让它尽可能简单


共 (1) 个答案

  1. # 1 楼答案

    最简单的方法是使用线程。我将至少有一个线程读取套接字,该套接字允许服务器随时向客户端发送消息

    混合响应和事件的问题是,第一个块无法工作,因为“响应”可能是一个事件

    如果不想使用线程,可以使用

    // simple but probably not a good idea.
    public String send(String message) {
        out.println(message);
        try {
            while(true) {
                String line = in.readLine();
                if (isEvent(line))
                   processEvent(line);
                else
                   return line;
        } catch (IOException ex) {
            return "";
        }
    }
    

    然而,它只会在发送请求时读取事件,如果不定期这样做,它可能会导致流一直堆积到服务器,从而导致流阻塞