我有一个名为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
,但在打开时不会触发任何警告。
如果您正在使用Eclipse(正如链接的问题所涉及的),则有一个选项可以在可能发生资源泄漏的地方显示警告。
打开Window>>>>Java>CompilerErrors/Warnings,设置"Potential resource leak"的严重级别为Warning