使用线程时必须在扫描仪中输入两次 - Java

时间:2014-10-06 00:31:14

标签: java multithreading

出于某种原因,在线程中使用Scanner时,我必须输入两次才能在Java中打印出来。我不知道为什么会这样,但IT非常烦人。因此,我的消息通过套接字发送到另一个人,但没有显示给发送它的人,但在第二次尝试时,它显示给发送它的人,但它没有找到应该收到的人它! (如果某些东西看起来不像来自Java API,那么因为它是我的API的测试类) 注意:两边的代码完全相同,只是它们使用不同的端口。

private static UDPSocket TestUDP;
private static String Username = "9843";

public static void main(String[] args) {
    try {
        TestUDP = new UDPSocket(9844);
        TestUDP.defineDefaultAddress("localhost", 9843);
        Username = "Lawton";
        System.out.println("You set your name to: " + Username);
        new Thread(new Receive()).start();
        new Thread(new Send()).start();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

static class Send implements Runnable {
    public void run() {
        try {
            while (true) {
                Scanner UserInput = new Scanner(System.in);
                TestUDP.send("0x00", Username + ": " + UserInput.nextLine());
                System.out.println(Username + ": " + UserInput.nextLine());
                Thread.sleep(1);
            }
        } catch (Exception E) {
            System.err.println("There was a error.");
        }
    }
}

static class Receive implements Runnable {
    public void run() {
        try {
            while (true) {
                byte[] Message = TestUDP.receive();
                System.out.println(Packet.decrypt(Message));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

使用变量来避免两次调用scanner.nextLine()

Scanner UserInput = new Scanner(System.in);
String readUsername = UserInput.nextLine();
TestUDP.send("0x00", Username + ": " + readUsername);
System.out.println(Username + ": " + readUsername);