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