I';我已经为java服务器和客户端做了很多,有没有办法停止并避免这种错误,然后重新启动菜单?

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

位于com.company.Server.main(Server.java:17)

进程已完成,退出代码为1

下面是代码,如何使菜单再次循环,以便在服务器终止后启动服务器

=========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();
    }