Предупреждение об утечке ресурсов Java не срабатывает, когда должно

У меня есть класс JavaShellStream, который расширяет интерфейсы Closeable и Autocloseable. Однако, когда я использую класс и не вызываю его close() метод, предупреждение об утечке ресурсов не выдается. У меня есть еще один класс с именем JavaShell, в котором есть метод с именем exec(String cmd), который возвращает объект JavaShellStream. Когда я создаю новый объект JavaShellStream следующим образом, предупреждение об утечке ресурсов не срабатывает:

//workingDir is a File object that sets the working directory
JavaShell js = new JavaShell(workingDir); 
//execute the "ls" command and retrieve output as a JavaShellStream
JavaShellStream jss = js.exec("ls");
/*
 * some code to read the text from the stream
 * but DOES NOT close the stream
 */
// Note that I am NOT calling the close() method

Почему здесь не срабатывает предупреждение об утечке ресурсов, потому что JavaShellStream jss никогда не закрывается? Ответ из здесь говорит, что все, что требуется для его запуска, это реализовать интерфейс Closeable, но мой класс реализует как Closeable, так и Autocloseable, но не будет вызывать никаких предупреждений при открытии.


person Mat Jones    schedule 03.11.2016    source источник
comment
У меня такая же проблема. Проблема возникает, когда экземпляр ресурса возвращается методом вместо вновь созданного. К сожалению, для этого нет решения (пока).   -  person ST-DDT    schedule 11.04.2017


Ответы (1)


Если вы используете Eclipse (как связанный вопрос), есть возможность отображать предупреждение, когда существует вероятность утечки ресурсов.

Перейдите в Окно > Настройки > Java > Компилятор > Ошибки/Предупреждения и установите для параметра "Возможная утечка ресурсов" уровень серьезности Предупреждение.

person M A    schedule 03.11.2016