2016-11-03 23 views
1

CloseableAutocloseableのインターフェイスを拡張する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というインターフェースを実装することですが、私のクラスはCloseableAutocloseableの両方を実装していますが、閉じていないと警告は出ません。

+0

私は同じ問題があります。この問題は、リソースインスタンスが新しく作成されるのではなくメソッドによって返される場合に発生します。残念ながら、まだ解決策はありません。 –

答えて

0

Eclipseを使用している場合(リンクされた質問に関連して)、リソースがリークする可能性がある場合に警告を表示するオプションがあります。 ウィンドウ>設定>のJava>コンパイラ>エラー/警告

移動し、警告に "潜在的なリソースリーク" の重大度レベルを設定します。

+0

私はすでにこのオプションを有効にしています。 –

関連する問題