出于某种原因,在线程中使用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();
}
}
}
答案 0 :(得分:0)
使用变量来避免两次调用scanner.nextLine()
:
Scanner UserInput = new Scanner(System.in);
String readUsername = UserInput.nextLine();
TestUDP.send("0x00", Username + ": " + readUsername);
System.out.println(Username + ": " + readUsername);