Resource leak: 'in' is never closed Resource leak: 'in' is never closed java java

Resource leak: 'in' is never closed


Because you don't close your Scanner

in.close();


As others have said, you need to call 'close' on IO classes. I'll add that this is an excellent spot to use the try - finally block with no catch, like this:

public void readShapeData() throws IOException {    Scanner in = new Scanner(System.in);    try {        System.out.println("Enter the width of the Rectangle: ");        width = in.nextDouble();        System.out.println("Enter the height of the Rectangle: ");        height = in.nextDouble();    } finally {        in.close();    }}

This ensures that your Scanner is always closed, guaranteeing proper resource cleanup.

Equivalently, in Java 7 or greater, you can use the "try-with-resources" syntax:

try (Scanner in = new Scanner(System.in)) {    ... }


You need call in.close(), in a finally block to ensure it occurs.

From the Eclipse documentation, here is why it flags this particular problem (emphasis mine):

Classes implementing the interface java.io.Closeable (since JDK 1.5) and java.lang.AutoCloseable (since JDK 1.7) are considered to represent external resources, which should be closed using method close(), when they are no longer needed.

The Eclipse Java compiler is able to analyze whether code using such types adheres to this policy.

...

The compiler will flag [violations] with "Resource leak: 'stream' is never closed".

Full explanation here.