web-dev-qa-db-fra.com

IntelliJ IDE donne une erreur lors de l'utilisation de Try-Catch avec des ressources

J'essaie d'utiliser l'instruction "try-catch with resources" de JDK 7; IntelliJ met en évidence ma ligne de ressources, en disant

Les ressources d'essai ne sont pas prises en charge à ce niveau de langue.

Lorsque j'essaye de compiler, j'obtiens:

Java: try-with-resources n'est pas pris en charge dans -source 1.6 (utilisez -source 7 ou supérieur pour activer try-with-resources)

J'ai vérifié que l'essai avec des ressources est activé pour mon projet actuel et que mon projet utilise JDK 7 (bibliothèque: C:\Program Files\Java\jdk1.7.0_11). Des idées? Je ne peux pas comprendre quelle option changer (si c'est même le problème).

48
Yankee

Cliquez sur le menu Fichier, ouvrez Structure du projet, puis sous "Paramètres" il devrait y avoir "Projet". Dans cet onglet, il y aura une option Paramètres du SDK qui spécifie la version linguistique que vous souhaitez utiliser.

Voir page d'aide JetBrains pour plus de détails ("Niveau de langue du projet").

52
Jon Skeet

La seule façon dont cette erreur se produira est si le niveau de langue de votre module n'est pas défini sur 1.7+. Cela doit être défini dans les paramètres de votre projet/module IntelliJ, le pom.xml fichier, ou les deux.

IntelliJ

enter image description here

Maven

<properties>
  <maven.compiler.source>1.7</maven.compiler.source>
  <maven.compiler.target>1.7</maven.compiler.target>

Les paramètres du module peuvent remplacer les paramètres du projet; si vous le définissez au niveau du projet et que vous rencontrez un problème spécifique dans un module, vérifiez également les paramètres du module.

50
Dave Newton

Outre les instructions mentionnées, j'ai également dû spécifier le niveau de langue par module. Fichier -> Structure du projet -> Modules

9
Ihor Tsebriy

Vérifiez également votre code. Vous pourriez avoir accidentellement fait quelque chose comme ça:

try (HttpClients.createMinimal().execute(new HttpGet(String.format(
          "http://127.0.0.1:%s/extra/LifecycleServlet?action=shutdown",
          runningPort)))) {

au lieu de

try (CloseableHttpResponse response = HttpClients.createMinimal().execute(new HttpGet(String.format(
          "http://127.0.0.1:%s/extra/LifecycleServlet?action=shutdown",
          runningPort)))) {

erreur facile à faire lorsque vous n'avez pas l'intention d'utiliser le résultat de votre ressource pouvant être fermée. mais il aura cette erreur trompeuse.

7
Nicholas DiPiazza

Représentation graphique des paramètres du module. enter image description here

1
CodeShadow