Java Scanner “unassigned closeable value” 永远不会关闭 [Eclipse]

Java Scanner "unassigned closeable value" is never closed [Eclipse]

提问人:RickiE 提问时间:7/14/2020 最后编辑:RickiE 更新时间:7/15/2020 访问量:3380

问:

每当我将扫描仪输入为“嵌套线”时,它都会警告我 [资源泄漏:'未分配的可关闭值'永远不会关闭],并建议我在它顶部添加。@SuppressWarnings("resource")

按照建议添加是正确的,还是有另一种更可取的方法?@SuppressWarnings("resource")

public static void main(String [] args){
    String name = new Scanner(System.in).nextLine();    
    System.out.printf("My name is %s", name);
}
Java Eclipse java.util.scanner

评论

0赞 username 7/14/2020
将扫描仪存储在变量中,然后在末尾使用它来关闭它scanner.close()
0赞 Scratte 7/15/2020
什么在告诉你这个?java编译器(什么版本?)还是IDE?当我在 Java 9 的命令行上运行您的代码时,我没有收到这样的警告。
0赞 user13784117 7/15/2020
在任何情况下,抱怨资源在终止时都没有被释放似乎有点多余。
1赞 Vega 7/15/2020
看看这个: stackoverflow.com/q/11463327/5468463

答:

1赞 Shailesh Jain 7/14/2020 #1

您可以使用 try-with-resource 构造,如下所示:

try(Scanner scanner = new Scanner(System.in)){
        String name = scanner.nextLine();
        System.out.printf("My name is %s", name);
    }

扫描程序是一种资源,需要关闭它。通过在 finally block 中调用 close() 方法手动关闭它,或者如上所述使用 try-with-resource,以便它自动关闭资源。

评论

6赞 DodgyCodeException 7/15/2020
请注意:关闭扫描仪也会关闭 System.in,关闭后您将无法在应用程序中执行其他操作。new Scanner(System.in)
1赞 Andreas moved to Codidact 7/15/2020 #2

您的 IDE 可能会警告您不要调用 ,因为 实现了 。由于您不想关闭,因此禁止显示警告,然后忘记它。您可以检查 IDE 的设置,了解它应该发出的警告 ()。它只是没有检测到扫描仪正在使用 .close()ScannerClosableSystem.inresourceSystem.in

IntelliJ IDEA?您可能已启用以下一项或多项:

Preferences -> Editor -> Inspections -> Resource management -> ...

enter image description here