@PRAIT

Почему не закрывается вход и происходит ли утечка ресурсов Java?

Привет ребята.
Написал простую программку консольного ввода, вывод в консоль в netBeans и всё вроде хорошо.
Но вот когда открываю файл в Visual Studio Code он пишет:

[Java] Resource leak: 'input' is never closed [536871799]
Scanner input - readingconsoleinputconsoleoutput.ReadingConsoleInputConsoleOutput.main(String[])



Утечка ресурсов: «вход» никогда не закрывается
Вход для сканера - readconsoleinputconsoleoutput.ReadingConsoleInputConsoleOutput.main (String [])


5c3a77cd5527a930438030.png

Исходный код
package readingconsoleinputconsoleoutput;
import java.util.Scanner;
public class ReadingConsoleInputConsoleOutput {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String name;
    String surName;
    int yearBorn;
    int yearNow;
    System.out.print("Your name:");
    name = input.nextLine();
    System.out.print("Your middle name:");
    surName = input.nextLine();
    System.out.print("What is the year now?");
    yearNow = input.nextInt();
    System.out.print("What year were you born?");
    yearBorn = input.nextInt();
    System.out.print("Hello, "+name+" "+surName+" ");
    System.out.print("Your age: "+(yearNow-yearBorn)+"");
  }
}


Что самое интересное, делал все по инструкции с книги. Так же, если скопировать весть исходный с книги выдаёт тоже самое. А в netBeans всё в порядке, нет никаких замечаний.
Объясните пожалуйста в чем может быть проблема? Спасибо!
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
axifive
@axifive
Go/Java Developer
Необходимо закрыть сканнер, когда вы закончили считывание.
Согласно современному подходу (с JDK 7) следует обернуть в try...catch с автозакрытием ресурсов:
String name;
String surName;
int yearBorn;
int yearNow;
try (Scanner input = new Scanner(System.in)) { // input автоматически закроется
    System.out.print("Your name:");
    name = input.nextLine();
    System.out.print("Your middle name:");
    surName = input.nextLine();
    System.out.print("What is the year now?");
    yearNow = input.nextInt();
    System.out.print("What year were you born?");
    yearBorn = input.nextInt();
    System.out.print("Hello, "+name+" "+surName+" ");
    System.out.print("Your age: "+(yearNow-yearBorn)+"");
} catch(Exception e) {
    //Обработка исключения, если возникло.
    e.printStackTrace();
}


Или устаревший вариант с ручным закрытием:
Scanner input = new Scanner(System.in);
try {
  ...
} catch(Exception e) {
   e.printStackTrace();
} finally {
   input.close(); // Закрываем
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
BostonGene Москва
от 100 000 до 200 000 руб.
Digital Horizon Москва
от 150 000 руб.
Рекадро Ярославль
от 100 000 руб.
20 янв. 2019, в 19:23
60000 руб./за проект
20 янв. 2019, в 13:50
15000 руб./за проект
20 янв. 2019, в 09:57
10000 руб./за проект