如何从InputStream中捕获事件?

时间:2012-05-16 07:25:44

标签: java sockets client

这是programm的客户端部分。 我有这样的类,它与套接字一起工作,并具有读写服务器的方法 如何使事件从服务器捕获消息? 一些actionListener仅在inputStream中有消息时才执行操作。 我试过调用Running.receiveLine()的计时器;但它的工作非常糟糕。 while(true)的解决方案似乎也不好。

public class Running extends Thread{
private Socket s;
private PrintStream ps;
private BufferedReader br;

public Running(){
try{
    s = new Socket(InetAddress.getLocalHost(), 8072);
    ps = new PrintStream(s.getOutputStream());
    br = new BufferedReader(new InputStreamReader(s.getInputStream()));
} catch (UnknownHostException ex) {
    System.out.println("11");
    ex.printStackTrace();
} catch (IOException ex) {
    System.out.println("00");
    ex.printStackTrace();
}
}

public String receiveLine(){
    String ret = "";
    try {
        ret = br.readLine();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return ret;
}

public void sendLine(String s){
    ps.println(s);
}

public void close(){
    try {
        s.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
  }

1 个答案:

答案 0 :(得分:0)

我认为使用方法read()不是问题,因为它会阻止流,直到新的数据部分可用。基于监视器,所有标准Java输入流都可以很好地实现此方法。所以你的线程在等待期间不会吃掉CPU和其他资源。

您也可以参考Java NIO中的非阻塞IO。

小增加。 要将其与Swing一起使用,您可以使用队列方法与SwingWorker融合。