I';我已经为java服务器和客户端做了很多,有没有办法停止并避免这种错误,然后重新启动菜单?
位于com.company.Server.main(Server.java:17) 进程已完成,退出代码为1 下面是代码,如何使菜单再次循环,以便在服务器终止后启动服务器I';我已经为java服务器和客户端做了很多,有没有办法停止并避免这种错误,然后重新启动菜单?,java,server,Java,Server,位于com.company.Server.main(Server.java:17) 进程已完成,退出代码为1 下面是代码,如何使菜单再次循环,以便在服务器终止后启动服务器 =========Menu Bagian Server========= 1. Start Server 2. server room 2. Exit ============================================= Masukkan Pilihan: masukkan angka! Except
=========Menu Bagian Server=========
1. Start Server
2. server room
2. Exit
=============================================
Masukkan Pilihan: masukkan angka!
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
at com.company.Server.menuServer(Server.java:35)
InputStreamReader
和BufferedReader
是所谓的过滤流:它们本身并不表示必须关闭的资源;它们围绕着其他资源
规则是,如果你关闭一个filterstream,它会关闭他们包装的东西。(因此,在br
上调用close()
将导致bufferedreader在该新InputStreamReader
对象上调用close()
,从而在系统中调用close
事情是这样的,虽然通常您希望总是关闭资源,但您不希望关闭系统。在!
在这里,您可以使用try构造
解决方案:只是..不要这样做。不要在这里做try(){}
块
你的IDE可能会抱怨。告诉它闭嘴,这是错误的
之所以出现此错误,是因为代码关闭了System.in
(通过到达try with resources块的末尾,该块在资源上调用close()
,在ISR上调用close()
,在System.in
上调用close()
),一旦关闭,就不能再从中读出更多的行了。这回答了您的问题吗?很有效,非常感谢
public static void serverRoom() throws IOException{
din = new DataInputStream(s.getInputStream());
dout = new DataOutputStream(s.getOutputStream());
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
String str = "", str2;
while (!str.equalsIgnoreCase("Exit")) {
str = din.readUTF();
System.out.println("client says: " + str);
str2 = br.readLine();
dout.writeUTF(str2);
dout.flush();
}
din.close();
s.close();
ss.close();
}