当前位置: 首页 > 知识库问答 >
问题:

资源泄漏错误

刘向阳
2023-03-14

大家晚上好。我是一个使用Java编程的完全初学者,我正在学习“扫描仪”,但是当我在Eclipse中键入这个基本代码时,我收到一条消息说“资源泄漏:‘扫描仪’永远不会关闭。

我做错了什么?

package inputting;

import java.util.Scanner;

public class Input {
    public static void main(String args[]) {
        Scanner scanner = new Scanner(System.in);
        System.out.println(scanner.nextLine());
    }
}

共有3个答案

申屠乐池
2023-03-14

这个问题已经问了几个月了,但我想补充一点:没有理由关闭系统。在(关闭扫描仪即可)中,您可能不应该这样做。这是Eclipse发出的与可关闭和自动关闭相关的自动警告,如果底层资源是系统,则可以忽略。在系统中。退出系统。错误

对于任何其他资源,都显示了正确的习惯用法(以确保即使抛出异常,资源也会被关闭)。

Java 7之前的版本:

Scanner scanner = null;
try {
    scanner = new Scanner(new FileInputStream("some/file"));

    // statements that throw exceptions
} finally {
    if(scanner != null)
        scanner.close(); // also closes the FileInputStream
}

发布Java7:

try(Scanner scanner = new Scanner(new FileInputStream("some/file"))) {

    // statements that throw exceptions
}

另请参见“为什么不在使用后关闭System.outStream?”系统也是如此。在:您不应该关闭未打开的资源,当进程终止时,VM将处理该资源。

令狐凌
2023-03-14

因为你根本没关扫描仪。这就是问题所在(处理I/O的类应该在完成后关闭)。您需要关闭它:

scanner.close();

因此,整个代码可以如下所示:

Scanner scanner = new Scanner(System.in);
try {
   // work
}
finally {
   if (scanner != null) {
      scanner.close();
   }
}
经嘉
2023-03-14

使用scanner完成后,必须使用off方法关闭:

scanner.close();

必须关闭它的原因是Scanner类实现了可关闭接口。直接从API:

Closeable是可以关闭的数据源或目标。调用close方法来释放对象所持有的资源(例如打开的文件)。

基本上,如果您从未关闭扫描仪,则程序将继续查找输入并保留资源。下面是一个非常简单的例子:

    Scanner scanner = null;

    try {
        scanner = new Scanner(System.in);

        while (scanner.hasNext()) {
            System.out.println(scanner.next());
            //do whatever you need here
        }
    } finally {
        if (scanner != null) {
            scanner.close();
        }
    }

从API中详细了解Scanner

 类似资料:
  • Eclipse Java警告:资源泄漏:“Unassigned Closeable Value”从不关闭 漏在哪里?

  • 我试图理解不对任何流调用close()会如何影响系统的性能和功能。为了做到这一点,我创建了下面的测试类。

  • 我正在使用Eclipse,并执行下面的函数,碰巧我打开了一个扫描器,然后,最后我关闭了它,但Eclipse一直说它没有关闭“资源泄漏:'Scanner'没有关闭”。我可以用try with resources来完成,警告消失了,但我想知道为什么我在这里尝试的方式不起作用

  • 大家好,我的程序员们。 我有一些代码,spring工具套件编辑器的反应也不一样,也许你们一些聪明人知道为什么。 有人能告诉我为什么这是不可能的吗: 但这是!? 第一行代码给了我一个警告“Resource leak:unassigned closeable value is never close”,正如您所看到的,我在try/catch中使用了一个finally,如果对象不为空,它应该总是关闭对象

  • 为什么Eclipse在下面的代码中给了我变暖的“资源泄漏:'in'从不关闭”?

  • 我是个新手。我已经编写了这段代码,它显示那里存在资源泄漏 这是什么意思?抱歉,我太天真了。