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



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

但是我的程序只能运行一轮。因此,服务器和客户端可以写一条消息,之后它停止并且不检查另一条消息。为什么线程没有被中断,却不能从头开始呢?-->请参阅下面的代码我希望你知道我的问题是什么,我很难描述。

读取新消息的线程

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类启动一个新服务器并等待客户端,然后启动两个线程。与客户端类相同,它连接到服务器并启动线程。

你可能在某处抛出了一个异常。在catch块中,打印错误。

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

最新更新