Java聊天程序,无限循环停止

时间:2014-05-03 22:18:51

标签: java multithreading chat

我必须建立一个聊天程序。 有服务器类,客户端类和两个写入和接收消息的线程。 这两个线程应该在一个无限循环中运行并且一直检查是否有输入并在之后打印该输入。

但我的计划仅适用于一轮。因此,服务器和客户端可以写一条消息,然后停止并不检查另一条消息。为什么线程从未中断时不会从头开始? - >看下面的代码 我希望你知道我的问题是什么,我很难描述。

线程阅读新消息

public class MsgWriter extends Thread  {

    private Socket s;

    public MsgWriter(Socket s){
        this.s = s;
    }
    public void run(){
        int i = 0;
    OutputStream out = null;
    PrintWriter writer;
    Scanner input;
    while(!interrupted()){
        try{
        synchronized(s){

        input = new Scanner (System.in);

            out = s.getOutputStream();

         writer = new PrintWriter(out);
         String toserver = input.nextLine();
         writer.write(toserver);
         writer.flush();
         System.out.println("me: " + toserver);

        }
         try {
            Thread.sleep((int) (100 * Math.random()));
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        }catch(Exception e) {
        }

    }
    }
}

检查是否有新消息并打印出来的线程。

public class MsgReader extends Thread {


    Socket s;

    public MsgReader(Socket s){
        this.s = s;

    }


    public void run()  {
        int i = 0;
    while (!interrupted()) {
        try{
        synchronized(s){

        InputStream in = s.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));

        String s = null;
        while((s=reader.readLine()) != null){
            System.out.println("d");
        }
        }
        try {
            Thread.sleep((int) (100 * 1));
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }catch (Exception e){

        }
        }

    }

    }

Server类启动一个新服务器并等待一个客户端,然后它启动两个线程。与客户端类相同,它连接到服务器并启动线程。

1 个答案:

答案 0 :(得分:0)

你可能会在某个地方发生异常。在catch块中,打印错误。

try {

} catch (Exception e) {
    System.out.println("Error: " + e);
}