Java Scanner需要输入两次

时间:2014-05-06 14:37:26

标签: java stream

这是我的问题,有一个服务器和一个客户端类通过2个线程进行通信(MsgWriter和MsgReader)

要读取输入并将其写入流中,我使用扫描仪。 它可以工作,但扫描仪需要两次输入才能继续。

例如: 我写了一条消息 您的留言:文字。

所以我想在点击“输入”后立即发送消息 但是我必须再次输入以发送文本。

对不起,我解释得非常糟糕。但是这里是MsgWriter线程的代码

public class MsgWriter extends Thread {

    private Socket s;
    private Buffer buffer = new Buffer();
    public MsgWriter(Socket s) {
        this.s = s;
    }

    public void run() {


        String message = "";
        BufferedReader br = null;
        boolean end = false;
        while(!end){
            try{
                synchronized (buffer) {
                    while (!buffer.isEmpty()) {
                        buffer.wait();
                    }
                    //buffer.put(s);
                OutputStream out = s.getOutputStream();
                PrintStream writer = new PrintStream(out);
                Scanner input = new Scanner(System.in);
                input.useDelimiter("\n");
            if (input.nextLine().equals("")){
                    System.out.println("Your message: ");

                    message = input.next();
                    br = new BufferedReader(new StringReader(message));

                     if (input.hasNext("x")) {
                        br = new BufferedReader(new StringReader("Good Bye"));
                        end = true;
                    }
                    message = br.readLine();
                    writer.println(message);
                    System.out.println("-------------------------------");
                }

            buffer.notifyAll();
                }

            }catch(Exception ex){
                System.out.println(ex.getMessage());
            }

        }

    }
}

输出

ServerIP:localhost / 127.0.0.1 端口号:56763 ++连接到服务器

你的留言: 嗨服务器


收到:客户

如果您需要MsgReader线程的代码,请告诉我。

1 个答案:

答案 0 :(得分:0)

你有这一行if (input.nextLine().equals(""))寻找空字符串输入,这就是你的代码等待第二次'Enter'按下的原因。您在代码中需要这个的具体原因是什么?