Closeable
とAutocloseable
のインターフェイスを拡張するJavaShellStream
というクラスがあります。ただし、クラスを使用してclose()
メソッドを呼び出さない場合、リソースリークがあるという警告は表示されません。私はJavaShell
と呼ばれる別のクラスを持っています。これは、オブジェクトを返すexec(String cmd)
というメソッドを持っています。私は次のように新しいJavaShellStream
オブジェクトを作成すると、何のリソースリークの警告がトリガされていない:Java「リソースリーク」警告が発生しないときにトリガーする警告
//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
が閉じられることはありませんので、リソースリークがあることを、ここでトリガされていませんか? hereの答えでは、それを起動するために必要なのは、Closeable
というインターフェースを実装することですが、私のクラスはCloseable
とAutocloseable
の両方を実装していますが、閉じていないと警告は出ません。
私は同じ問題があります。この問題は、リソースインスタンスが新しく作成されるのではなくメソッドによって返される場合に発生します。残念ながら、まだ解決策はありません。 –