2017-06-06 100 views
0

我有这个下面的代码声明,声纳提高拦截问题上的Java FileSystems.getDefault()

this.watchService = FileSystems.getDefault().newWatchService(); 

声纳(sonarqube 5.6.4)提出了在FileSystems.getDefault阻断剂的问题()上面的代码,这说明部分,

资源应该被关闭 - Java的垃圾回收不能 靠它来清理一切。具体来说,创建 后,必须手动关闭连接,流, 文件和实现可关闭接口的其他类或其超类接口AutoCloseable的类。如果不这样做,会导致资源泄漏,可能会首先将应用程序,然后可能是它的 膝盖。

然后,我检查的Javadoc 文件系统它说,由默认提供者创建

文件系统不能关闭。

参考 - >https://docs.oracle.com/javase/7/docs/api/java/nio/file/FileSystem.html

现在我的问题是如何解决这个问题声纳,无标记它忽略。 如果有人解决了这个问题,请帮忙。

+0

您使用的是哪个版本的SonarJava分析仪?这应该在最近的版本中工作。您可以在SonarQube更新中心更新SonarJava分析器 –

回答

0

如果您确信自己的情况,最简单的做法是告诉Sonar,您在这里有什么是误报,并且不应该被标记。 您可能也可以使用资源构造尝试,使Sonar认为资源正在关闭,但事实上并非如此(如果Java正确处理它,在使用资源尝试时不应尝试关闭资源这个案例)。

+0

try-with-resources不起作用,默认文件系统会抛出'UnsupportedOperationException'。将其标记为FP是一种可行的方法 –

+1

我在SonarJava分析器上创建了一个JIRA票证来修复这种误报https://jira.sonarsource.com/browse/SONARJAVA-2343 –

+0

right @TiborBlenessy,尝试使用资源不会解决这个问题。 – aksss