0

これはプログラムのクライアント部分です。ソケットで動作し、サーバーに読み書きするメソッドを持つクラスがあります。サーバーからのメッセージをキャッチするイベントを作成するにはどうすればよいですか? inputStream にメッセージがある場合にのみアクションを実行する actionListener があります。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();
    }
}
  }
4

1 に答える 1

0

read()データの新しい部分が利用可能になるまでフローをブロックするため、メソッドを使用しても問題はないと思います。すべての標準 Java 入力ストリームには、モニターに基づくこのアプローチの適切な実装があります。したがって、待機中にスレッドが CPU やその他のリソースを消費することはありません。

また、Java NIO のノンブロッキング IO を参照することもできます。

小さな追加。 と一緒に使用するにSwingは、キュー アプローチを と融合して使用できますSwingWorker

于 2012-05-16T07:34:37.417 に答える