IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

erreur dans constructeur sans exception


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Doctorante
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Par défaut erreur dans constructeur sans exception
    Bonjour à tous !

    Je vous appelle à l'aide car je vais devenir folle avec ce code Java. J'ai une méthode faisant appel à un constructeur de classe basique, constructeur qui ne "démarre" pas, mais ne semble pas lancer pour autant d'exception.
    Je tiens à préciser que je ne suis pas experte en Java et que ce n'est pas moi qui ai codé cette application passablement grande (les joies de la maintenance) et que je ne peux donc pas vous afficher tout le code. Voici cependant les deux fautifs :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
     
    import java.awt.*;
    import javax.swing.*;
     
    import java.util.*;
    import java.io.File;
     
     
    /***********************
    * Class implementation *
    ******************************************************************************/
     
    public class MapDrawer extends JPanel {
    	private int			width = 0;
    	private int			height = 0;
    	private Image		mapImage = null;
    	private String		timeValue = "Time: 00:00";
     
    	private	int[]	pointsX1 = {0,0,0,0};
    	private	int[]	pointsY1 = {0,0,0,0};
    	private	int[]	pointsX2 = {0,0,0,0};
    	private	int[]	pointsY2 = {0,0,0,0};
     
    	private Hashtable<Object,Object>	drawableObjects = null;
     
     
     
    	//== CONSTRUCTORS & DESTRUCTORS =========================================//
     
    	public MapDrawer(String mapFile) {
    		LoadImage(mapFile);
     
    		drawableObjects = new Hashtable<Object,Object>();
     
    		this.repaint();
    	}
     
    	public void	updateEnemy(String owner, int x, int y, String name) {
    		try
    		{
    		DrawableEnemy	tmpObject = (DrawableEnemy) drawableObjects.get(owner);
    		JOptionPane.showMessageDialog(null, "coucou1");
    		DrawableEnemy enemy  = new DrawableEnemy(this, x, y, name);
    		JOptionPane.showMessageDialog(null, "coucou2");
     
    		if (tmpObject == null)
    		{
    			drawableObjects.put(owner, enemy);
    		}
    		else
    			tmpObject.updateObject(x, y, name);
    		}catch(Exception ex){JOptionPane.showMessageDialog(null, ex.toString());}
    	}
    }
    Le constructeur en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public class	DrawableEnemy implements DrawableObject {
     
    	private int		x, y;
    	private int		range = 250;
    	private String	name = null;
    	private int		fx=0, fy=0, fr=0;
    	private int[]	color = {220, 60, 0};
     
    	private MapDrawer	parent;
     
     
    	//== CONSTRUCTORS & DESTRUCTORS =========================================//
     
    	public DrawableEnemy(MapDrawer parent, int x, int y, String name) throws Exception {
    		try
    		{
    			this.x = x;
    			this.y = y;
    			this.name = name;
    			this.parent = parent;
    		}
    		catch(Exception ex){JOptionPane.showMessageDialog(null, "HELLO!!!!!!");throw(ex);}
        }
    }

    Mes tests "simplistes" n'affichent que "coucou1"

    Merci d'avance de vos réponses.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Par défaut
    Salut,

    Le code du constructeur DrawableEnemy est-il complet ? Si oui, alors le bloc try-catch est inutile.
    A tout hasard, tu as essayé de mettre un simple System.out.println dans le catch de la méthode updateEnemy

  3. #3
    Membre averti
    Femme Profil pro
    Doctorante
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Par défaut
    Oui, le bloc est complet. Il me semblait bien aussi que try catch était inutile, mais bon, quand on est désespérée...

    Sinon, j'ai effectué un system.out.println, et ça ne s'affiche pas. En ayant refait cette partie de code sous Eclipse, ça marche nickel. ( faut dire que je m'occupe d'interactions Prolog/Java, sans IDE pour coder donc c'est un peu chaud ! ) Il semblerait donc que le problème ne vienne pas de mon code en lui même mais de l'interaction en question...
    Cependant si quelqu'un voit quelque chose qui pourrait ne pas être très propre, je suis bien décidée à y remédier

    Bon ben, j'y retourne.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 71
    Par défaut
    Et DrawableObject, de quoi s'agit-il, d'une classe ?

    Si oui, tu peux tomber sur des bugs assez pénibles lors de la construction d'une classe. En effet, le constructeur de DrawableEnemy en lui-même ne va pas nécessairement envoyer une exception mais il peut y en avoir une dans l'appel (implicite ici) du super constructeur (c'est le cas le plus simple à détecter) mais aussi dans l'initialisation des paramètres de la classe DrawableEnemy elle-même où des ses super classes, où encore dans d'éventuels initialiseurs, static ou non. je n'en vois pas dans DrawableEnemy mais il pourrait y en avoir dans DrawableObject.

    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public abstract class A {
     
        private Object _object = new UN_OBJECT(); // Constructeur qui ne marche pas
     
        static {
            // ... faire une initialisation static
            throw Exception("une exception pénible");
        }
     
        {
            // ... faire une initialisation non-static
            throw Exception("une autre exception pénible");
        }
     
    }
     
    public final class C extends A {
     
        private int _aField = 0;
     
        public C() {}
     
    }
    Ici, la classe C à l'air tout ce qu'il y a de simple et tranquille mais avec ce qu'il y a dans A... Ca peut planter (ça va planter en fait !!!) dans:
    • new UN_OBJECT();
    • Dans le bloc d'initialisation static {}.
    • Dans le bloc d'initialisation d'instance.


    En plus, tu peux mettre tous les points d'arrêt et/ou messages de debug que tu veux dans le constructeur de C, tu n'en verra jamais la couleur.

    Voilà quelques pistes de recherche. Dis moi si ça t'aide...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 71
    Par défaut
    Au temps pour moi... Si j'avais lu le code avec assez d'attention tout à l'heure, j'aurais vu que DrawableObject est une interface. Mon hypothèse ne tiens donc pas...

    Sauf si tu as supprimé certains pans de code pour simplifier le propos et que ceux-ci contenaient l'erreur.

    Ceci dit, le problème peut également exister avec une interface mais dans une moindre mesure. Exit les initialiseurs static et non-static. il ne reste que d'éventuels attributs de l'interface (i.e. des constantes définies dans celle-ci) qui pourraient envoyer une exception lors de leur instanciation comme dans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public interface I {
     
        A_TYPE a_constant = new A_TYPE();
     
    }

  6. #6
    Membre averti
    Femme Profil pro
    Doctorante
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Par défaut
    En fait ça ne venait pas des classes en elles-même mais des relations avec un autre thread. J'ai contourné le problème, c'est tout moche et je sais qu'il faudra que je revois ça mais ça me permet de continuer mon travail.

    Merci pour vos réponses, ça m'a permis de mieux comprendre (un peu) le fonctionnement de tout ce bazar. (parce que Java, moi j'ai un peu mal)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exception dans constructeur de classe refusé
    Par gilims dans le forum Langage
    Réponses: 7
    Dernier message: 15/06/2010, 21h33
  2. Erreur dans le constructeur
    Par rimbaut dans le forum Langage
    Réponses: 7
    Dernier message: 14/02/2010, 12h13
  3. Réponses: 2
    Dernier message: 19/09/2007, 14h51
  4. erreur "sans erreur" dans getElementById
    Par Tooomas dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 26/03/2007, 12h23
  5. Réponses: 3
    Dernier message: 18/08/2006, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo