Programmation Java/Débogage

Un livre de Wikilivres.
Aller à : navigation, rechercher


Sections

Erreurs à la compilation[modifier | modifier le wikicode]

Fenêtre de warning ...java uses unchecked or unsafe operations[modifier | modifier le wikicode]

Une déclaration ne tient pas compte des surcharges possibles, une conversion de variable pose problème. Il faut donc en prévoir les exceptions. Par exemple pour manipuler des entiers :

try {
  i = i/2;
} catch (NumberFormatException e) {
  return 0;
}

<identifier> expected[modifier | modifier le wikicode]

L'ordre des déclarations n'est pas chronologique.

annotation type not applicable to this kind of declaration[modifier | modifier le wikicode]

Voir @Override.

cannot be dereferenced[modifier | modifier le wikicode]

  • Il suffit de retirer la conversion, le .toString() après la variable de type int sélectionnée.
  • Ou en ajouter une comme : (float), Float.valueOf(), ou .floatValue().

cannot find symbol - variable[modifier | modifier le wikicode]

Soit :

  • La variable mentionnée n'a pas été déclarée ;
  • Sa déclaration trouve dans une condition (if ou try) fermée avant la ligne en erreur ;
  • Elle se trouve dans un package non importé ;
  • Si elle se trouve dans un autre fichier, les compiler depuis leur répertoire parent commun (les IDE le font automatiquement) :
javac Projet1/Classe1.java
javac Projet1/Classe2.java

cannot instantiate from arguments because actual and formal argument lists differ in length[modifier | modifier le wikicode]

Cela peut survenir suite à un Collections.sort(liste), alors même que le Collections.shuffle(liste) fonctionne. Il faut donc utiliser import java.util.Comparator; dans le trie :

import java.util.Collections;
import java.util.Comparator;
...
private List<T> list;
private Comparator<T> comparator = null;
if(this.comparator!= null) {
       Collections.sort(list, comparator);
    }

constructor variable in class classe cannot be applied to given types[modifier | modifier le wikicode]

exception IOException is never thrown in body of corresponding try statement[modifier | modifier le wikicode]

Un try inutile a été détecté.

impossible de trouver la classe principale[modifier | modifier le wikicode]

Lancer la commande "java" vers un .class (et non un .java).

incompatible types: possible lossy conversion from float to int ou double to float[modifier | modifier le wikicode]

Il faut passer une conversion de format :

java.text.DecimalFormat df = new java.text.DecimalFormat("#");
monFloat = Float.valueOf(df.format(monDouble));

java.lang.NumberFormatException[modifier | modifier le wikicode]

  • Un nombre décimal contient un symbole qui n'est pas un chiffre (ex : €) ou bien une virgule à la place d'un point.

local variable referenced from a lambda expression must be final or effectively final[modifier | modifier le wikicode]

local variable variable is accessed from within inner class; needs to be declared final[modifier | modifier le wikicode]

no suitable method found for - méthode[modifier | modifier le wikicode]

La méthode mentionnée n'a pas été déclarée, ou du moins pas avec ce type de paramètre (ex : remplacer .addAll() par .add()).

no suitable constructor found for Integer(double)[modifier | modifier le wikicode]

Convertir plus explicitement :

MonEntier = ((Integer)MonDouble).intValue();

no suitable constructor for classe is abstract cannot be instanciated[modifier | modifier le wikicode]

S'il est possible de retirer le mot abstract de la déclaration de la classe, le faire.

non-static method/variable ... cannot be referenced from a static context[modifier | modifier le wikicode]

Cela peut se produire en invoquant une méthode ou une variable dans sa classe. Par exemple ci-dessous il fallait ajouter ou remplacer le "this." par "c." :

MaClasse c = New MaClasse();
c.MaMethode();

not a statement[modifier | modifier le wikicode]

Il manque sûrement les parenthèses après le nom d'une méthode.

reference to assertequals is ambiguous[modifier | modifier le wikicode]

Il convient d'assurer un typage plus fort des paramètres de assertequals(), par exemple avec .intValue().

unclosed character literal[modifier | modifier le wikicode]

Problème d'encodage, remplacer les apostrophes par des guillemets.

unreachable statement[modifier | modifier le wikicode]

Une partie de code ne sera jamais exécutée, parce qu'elle est juste après un break ou un return.

unreported exception ...; must be caught or declared to be thrown[modifier | modifier le wikicode]

Une exception personnalisée est lancée (throw new NomDelException("Message");) sans que sa méthode soit déclarée avec throws NomDelException.

variable is already defined[modifier | modifier le wikicode]

Si la variable est redéfinie dans une condition différente, il faut les séparer avec des { }, ex :

switch (args[0].toString()) {
  case "1": {
    a = 1;
    break;
  }
  case "2": {
    a = 2;
    break;
  }
}

variable might not have been initialized[modifier | modifier le wikicode]

Il faut assigner une valeur par défaut à l'objet. Ex :

String[] a = {"", ""};
BufferedWriter bw = null;

Erreurs à l'exécution[modifier | modifier le wikicode]

Si deux variables de type String identiques ne peuvent pas être comparées[modifier | modifier le wikicode]

L'opérateur == vérifie les références en plus des valeurs. Il faut donc lui préférer .equals().

String s = "test";
StringBuffer sb = new StringBuffer("test");
System.out.println(s == new String(sb));         // false !
System.out.println(s.equals(new String(sb)));    // true :)

De plus, on peut les forcer avec .toString().

Si une division fait toujours 0.0[modifier | modifier le wikicode]

Ajouter (float) avant.

NullPointerException[modifier | modifier le wikicode]

Soulevée si l'on applique une méthode sur un objet null. On peut donc changer l'appel ou lever l'exception :

    try {
        ...
    } catch (NullPointerException npe) {
        npe.printStackTrace(); 
    }

aucun attribut manifest principal dans ...jar[modifier | modifier le wikicode]

Il n'y a pas de méthode main() dans le .jar, ce fichier ne peut donc pas être exécuté directement, mais uniquement décompressé (avec le freeware 7zip ou la commande jar xvf).

Class names, classe, are only accepted if annotation processing is explicitly requested[modifier | modifier le wikicode]

Les classes définies à la compilation (par exemple avec javac -classpath) sont introuvables.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1[modifier | modifier le wikicode]

Un des tableau de la ligne indiquée est appelé avec un indice supérieur à sa taille.

java.lang.ArithmeticException: / by zero[modifier | modifier le wikicode]

Une division par zéro s'évite généralement par un if sur le dénominateur, ou un throw d'une exception.

Stream closed[modifier | modifier le wikicode]

Retirer le .close() de la boucle du .read() ou du .write(), même s'il est situé après. Si cela ne suffit pas, le retirer de la méthode.

Unable to load native library: Can't load IA 32-bit .dll on a AMD 64-bit platform[modifier | modifier le wikicode]

Réinstaller JRE en changeant de version.

Voir aussi[modifier | modifier le wikicode]

Recommandations d'Oracle : http://search.oracle.com/search/search?start=1&search_p_main_operator=all&q=convention