使用thread-Java时必须在scanner中输入两次内容

使用thread-Java时必须在scanner中输入两次内容,java,multithreading,Java,Multithreading,由于某些原因,在线程中使用Scanner时,我必须输入两次内容,以便用Java打印出来。我不知道这是为什么,但这很烦人。因此,我的消息通过套接字发送到另一个人,但不会显示给发送它的人,但在第二次尝试时,它会显示给发送它的人,但不会显示给应该接收它的人! 如果某个东西看起来与JavaAPI不一样,那是因为它是我的API的测试类 注意:两侧的代码完全相同,只是它们使用不同的端口 private static UDPSocket TestUDP; private static String Usern

由于某些原因,在线程中使用Scanner时,我必须输入两次内容,以便用Java打印出来。我不知道这是为什么,但这很烦人。因此,我的消息通过套接字发送到另一个人,但不会显示给发送它的人,但在第二次尝试时,它会显示给发送它的人,但不会显示给应该接收它的人! 如果某个东西看起来与JavaAPI不一样,那是因为它是我的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();
        }
    }
}

使用变量避免调用scanner.nextLine两次:

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