FAQ Langage JavaConsultez toutes les FAQ

Nombre d'auteurs : 41, nombre de questions : 296, dernière mise à jour : 8 mars 2017  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur le forum Java de http://java.developpez.com ainsi que l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.

Sur ce, nous vous souhaitons une bonne lecture.


SommaireEn développementExceptions en développement (9)
précédent sommaire suivant
 

Ce message indique que vous devez capturer et traiter une exception de type Checked exception dans le corps de votre méthode. En effet, le compilateur rend obligatoire le traitement de ce genre d'erreurs.

Code Java : Sélectionner tout
1
2
3
4
5
6
7
8
9
public void maMethode() { 
    try { 
        // Code qui peut générer une checked exception de type MonException. 
        [...] 
    } catch (MonException ex) { 
        // Traitement de l'exception. 
        [...] 
    } 
}

Alternativement, vous pouvez également modifier la signature de la méthode et déclarer que votre méthode peut potentiellement générer une telle exception, ce qui vous permet de ne pas la traiter à cet endroit :

Code Java : Sélectionner tout
1
2
3
4
public void maMethode() throws MonException { 
    // Code qui peut lancer une checked exception de type MonException. 
    [...] 
}

Mis à jour le 9 avril 2015 Clement Cunin Sébastien MERIC

L'exception java.lang.NullPointer est une Runtime exception qui est générée lorsque l'application essaye d'utiliser une instance d'un objet, mais que celle-ci est à la valeur null. Cela inclut :

  • l'appel d'une méthode sur un objet dont la référence a une valeur null ;
  • la lecture ou la modification d'un champ sur un objet dont la référence a une valeur null ;
  • demander la longueur d'un tableau dont la référence a une valeur null ;
  • la lecture ou la modification d'une case d'un tableau dont la référence a une valeur null ;
  • générer une exception dont la valeur est null.


Cette exception est donc générée à chaque utilisation incorrecte d'une valeur null.

Mis à jour le 22 août 2002 bouye Clement Cunin

L'exception java.lang.IndexOutOfBoundsException est une Runtime exception qui est générée lorsque l'on essaie d'accéder à une case d'un tableau (ou d'une collection) qui n'existe pas.

Il faut avant tout vérifier la valeur indiquée dans le message de l'exception pour savoir si on ne tente pas d'accéder à une case inexistante.

Code Java : Sélectionner tout
1
2
3
4
5
int [] monTab=new int[20]; // creation d'un tableau de taille 20 
for(int i=0;i<20;i++) { 
   tab[i]=i; // on le remplit 
} 
System.out.println(tab[20]); // on accède à la 21e case en voulant accéder à l'indice 20...

Cette erreur survient le plus fréquemment quand on essaie d’accéder à la dernière case du tableau sans prendre en compte le fait que le tableau commence à l'index 0 et non pas 1 comme on pourrait le croire.

Mis à jour le 20 octobre 2006 samao

L'exception java.lang.ClassNotFoundException est une Checked exception qui peut être générée principalement de trois manières :

  • la méthode forName() de la classe java.lang.Class ;
  • la méthode findSystemClass() de la classe java.lang.ClassLoader ;
  • la méthode loadClass() de la classe java.lang.ClassLoader.


Cette exception peut indiquer deux choses :

  • soit que votre CLASSPATH est mal configuré ;
  • soit que les droits du fichier JAR ou du fichier CLASS ne permettent pas la lecture de celui-ci pour l'utilisateur courant.


Vérifiez que vos bibliothèques externes sont bien référencées dans le CLASSPATH. Si votre CLASSPATH est correct, vérifiez alors les droits de vos fichiers, vous devez disposer d'au moins les droits en lecture.

Mis à jour le 29 septembre 2015 bouye cyberzoide Ioan

L'exception java.lang.SecurityException est une Runtime exception que le gestionnaire de sécurité de la JVM peut générer quand vous tentez d’accéder à des ressources protégées.

Cela peut être le cas pour les Applets, par exemple. Celles-ci doivent être signées pour pouvoir accéder aux ressources de la machine cliente, (système de fichiers, classe Robot, etc.). Vous pouvez aussi tenter d'éditer le fichier java.policy de la JVM pour régler ces droits d'accès.

Mis à jour le 29 septembre 2015 Ioan

L'erreur java.lang.OutOfMemoryError est générée lorsque la JVM ne peut plus allouer de mémoire pour un nouvel objet. Cela survient lorsque le ramasse-miettes ne peut plus en libérer.

Une possibilité pour contourner ce problème est d'allouer plus de mémoire au lancement de la JVM avec l'option -Xmsn. Vous pouvez aussi fixer la taille maximale de la mémoire avec l'option -Xmxn. Ici, n indique la mémoire initiale disponible. Les valeurs par défaut sont respectivement de 2 Mo et 64 Mo.

Voici un exemple de notation :

Code Console : Sélectionner tout
1
2
3
4
5
6
java -Xms6291456 
# 6291456 bytes 
java -Xms6144k 
# 6144 kilo-octets 
java -Xms6m 
# 6 méga-octets

Mis à jour le 29 septembre 2015 Ioan

Avant le JDK 7
Dans une application graphique, certaines exceptions se déclenchent depuis le thread dédié à l'affichage. Il n'est pas possible d'intercepter ces exceptions avec un bloc try/catch classique.

Il est cependant possible d'enregistrer une classe qui sera chargée de gérer ces erreurs. Pour ce faire la propriété système sun.awt.exception.handler doit contenir le nom complet d'une classe ayant une méthode handle(Throwable erreur).

Cela peut être fait en passant l'option -Dsun.awt.exception.handler=<nom de la classe> à la machine virtuelle ou par le biais de la méthode setProperty() de la classe java.lang.System au lancement du programme.

À chaque exception non interceptée, une nouvelle instance de cette classe est créée. Vous devez donc fournir un constructeur vide. Ensuite, la méthode handle() est invoquée.

Cette manière de faire ne fonctionne plus à partir du JDK 7.

JDK 5
À partir du JDK 5, on peut utiliser l'interface java.lang.Thread.UncaughtExceptionHandler. Cette interface est utilisable par deux méthodes de la classe java.lang.Thread :

  • setDefaultUncaughtExceptionHandler() - cette méthode statique permet de positionner un gestionnaire d'erreur par défaut commun à tous les threads ;
  • setUncaughtExceptionHandler() - cette méthode permet de positionner un gestionnaire d'erreur thread par thread.

Mis à jour le 29 septembre 2015 adiGuba bouye

Le compilateur refusera de compiler du code contenant un multi-catch si ce bloc contient un type parent d'une des autres exceptions capturées par le catch.

Par exemple :

Code Java : Sélectionner tout
1
2
3
4
5
try { 
    [...] 
} catch (ArrayIndexOutOfBoundsException | IndexOutOfBoundsException ex) {             
    [...] 
}

Ici IndexOutOfBoundsException est la classe parente de ArrayIndexOutOfBoundsException ; le compilateur refusera donc cette expression. Vous pouvez résoudre le problème en utilisant le type le plus large dans la déclaration :

Code Java : Sélectionner tout
1
2
3
4
5
try { 
    [...] 
} catch (IndexOutOfBoundsException ex) {             
    [...] 
}


De la même manière, le code suivant ne compilera pas puisque IOException est une classe parente de FileNotFoundException et de SocketException :

Code Java : Sélectionner tout
1
2
3
4
5
try { 
    [...] 
} catch (NumberFormatException | FileNotFoundException | SocketException | IOException ex) {             
    [...] 
}

Le problème se résout en utilisant à la place :

Code Java : Sélectionner tout
1
2
3
4
5
try { 
    [...] 
} catch (NumberFormatException | IOException ex) {             
    [...] 
}

Mis à jour le 15 septembre 2015 bouye

Avant le JDK 1.4

Code Java : Sélectionner tout
1
2
3
4
Throwable t = new Throwable();  
StringWriter sw = new StringWriter();  
t.printStackTrace(new PrintWriter(sw, true));  
String stackTrace = sw.toString();
La chaîne ainsi obtenue correspond à l'affichage de la méthode printStackTrace() d'une exception.

JDK 1.4

Code Java : Sélectionner tout
1
2
Throwable t = new Throwable();  
StackTraceElement traces[] = t.getStackTrace();
Le tableau traces contient la pile d'exécution au moment de la création du Throwable. Le premier élément du tableau correspond à la création du Throwable, le dernier élément du tableau représente le bas de la pile.

Mis à jour le 19 juillet 2004 bulbo

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsables bénévoles de la rubrique Java : Mickael Baron - Robin56 -