当前位置: 首页 > 面试题库 >

流关闭且未重新打开-Java

夹谷琨
2023-03-14
问题内容

我可以轻松进行“作业”,但是我发现输入流的关闭存在一些问题。简单地说,我必须使用Java创建一个联系人“列表”应用程序,才能以正确的方式使用多态。所以我有一个Contact类和一个Private类(contact)。在这两个类中,都有一个Modify方法来更改变量的值。

public void modify() throws IOException {
    System.out.println("Previously name: " + name);
    System.out.println("Insert new name");
    try(InputStreamReader ir = new InputStreamReader(System.in);    
    BufferedReader in = new BufferedReader(ir) ) {  
        name= in.readLine();
        System.out.println("You've changed the name to: "+ name);                       
    System.out.println("Previously surname: " + surname);
    System.out.println("Insert new surname");
        surname= in.readLine();
        System.out.println("You've changed the surname to: "+ surname);                         
    System.out.println("Previously e-mail: " + email);
    System.out.println("Insert new e-mail");
        email = in.readLine();
        System.out.println("You've changed the e-mail to: "+ email);    }                   
}

这是不会产生问题的Contact方法

@Override 
public void modify() throws IOException {
    super.modifica();
    System.out.println("Numero di cellulare precedente: " + cell);
    System.out.println("Inserire nuovo numero");
    try (InputStreamReader ir = new InputStreamReader(System.in);   
    BufferedReader in = new BufferedReader(ir)) {
        cell = in.readLine();
        System.out.println("Hai cambiato il numero in: "+ cell);                        
    System.out.println("Contatto skype precedente: " + skype);
    System.out.println("Inserire nuovo contatto");
        skype = in.readLine();
        System.out.println("Hai cambiato il contatto in: "+ skype);                         
}   
}

相反,这是Private中方法的替代。首先,我创建一个Private对象,然后调用Modify方法。我可以毫无问题地插入名称,姓氏和电子邮件,然后该方法将引发IO异常,因为流已关闭。我不明白为什么会有这种问题。我认为通过尝试使用第一个代码中的资源来关闭流,但是随后通过尝试使用资源的第二个代码中来打开流。我的想法可能是错误的。


问题答案:

您的问题确实是由于try-with-resource语句关闭new InputStreamReader(System.in)而导致的,该语句在幕后也关闭了System.inin是的public static字段System)的基础输入流,以致您的modify方法中的该输入流System.in已经关闭,因此无法再读取,这就是为什么您会收到此异常



 类似资料:
  • 关闭Android Studio选项卡后,我无法再次打开它。在卸载并重新安装软件之前,我无法打开Android Studio。每隔一段时间,屏幕就会变灰,我不得不重新安装。 我尝试过右键单击并选择“打开”,但它没有任何作用。 我原以为Android Studio会在点击后打开,但似乎我从来没有安装过它。它只在我关闭选项卡之前有效。 更新: 我进入我的文件,点击了一个叫做“工作室”的。它给了我一个名

  • 新窗口打开链接 该方法可以新起webview打开页面,由于客户端窗口过多会占用较多内存,请谨慎使用 Tida.pushWindow("http://www.tmall.com/go/chn/common/u-award.php?disableptf=1"); 关闭窗口 关闭当前webview窗口 Tida.popWindow();

  • 问题内容: 我当时正在帮助一个朋友编写一些Java代码,而他们对Java并不了解很多。因此,我给他写了一些辅助函数,以轻松地完成在他眼中有些古怪的事情。其中一个函数是将String写入的函数。看一看: 现在,您可以轻松地以各种方式使用它,在任何地方书写。例如,您可以这样做: 这样做后,我发现之后不再向外壳写入任何内容。所以我认为也许也会自动关闭,我想知道如何重新激活它,以便在该功能再次完成后可以使

  • 问题内容: 我有一个多线程控制台应用程序,它从两个不同的来源获取输入。一种是用户在控制台中键入内容,另一种是网络。我使用BufferedReader.readline()从用户那里获取输入,并且该输入被阻止,这很好,除非在等待时收到网络输入。在那种情况下,我需要通过取消readline()来解除对用户线程的阻塞。 我想最好的取消方法是关闭System.in并使readline()抛出异常。在那之后

  • 本文向大家介绍Android 打开关闭DrawerLayout,包括了Android 打开关闭DrawerLayout的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 打开 M600 长按侧边电源按钮直至屏幕上出现 Polar 标志。 关闭 M600 导航至 Settings(设定)应用程式,滚动菜单找到并轻触 System(系统)。 轻触关机。 通过轻触核取标记图标确认关闭电源。