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

avec Java Discussion :

[Debutant] Probleme de NullPointerException à l'execution !


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 71
    Points : 42
    Points
    42
    Par défaut [Debutant] Probleme de NullPointerException à l'execution !
    Bonjour à tous,

    Ci dessous les 4 classes d'un petit programme simple qui crée une voiture composée d'un moteur et d'un calculateur de vitesse. La classe de lancement est Interface.java.

    Classe Interface.java :
    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
     
     
    public class Interface {
     
    	private Voiture voiture;
     
    	private static final Interface monInterface = new Interface();
     
    	Interface(){
    		voiture = new Voiture();
     
    		//Je voudrais afficher ici la valeur de la vitesse :
     
    		System.out.println(monInterface.getVoiture().getVitesse());
    	}
     
    	public static Interface getInstance() {
    		return monInterface;
    	}
     
    	public Voiture getVoiture(){
    		return voiture;
    	}
     
    	public static void main(String[] args)
    	{
    		//Alors que l'affichage ici fonctionne :
     
    		System.out.println("Regime moteur : " + monInterface.getVoiture().getMoteur().getRegime());
    		System.out.println("Vitesse : " + monInterface.getVoiture().getVitesse());
    	}
    }
    La classe Voiture.java :
    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
     
     
    public class Voiture {
     
    	//attributs
    	private Moteur moteur;
    	private CalculVitesse calculVitesse;
     
     
    	//constructeur
     
    	public Voiture(){
    		moteur = new Moteur();
    		calculVitesse = new CalculVitesse();
    	}
     
    	//methodes
     
    	public Moteur getMoteur(){
    		return moteur;
    		// idem que
    		// return this.moteur;
    	}
     
    	public CalculVitesse getCalculVitesse(){
    		return calculVitesse;
    	}
     
    	public double getVitesse(){
    		return getCalculVitesse().getVitesse();
    	}
     
     
     
    }
    La classe Moteur.java :

    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
     
     
    public class Moteur {
     
    	private int regime=2500;
     
    	Moteur(){
     
    	}
     
    	public int getRegime(){
    		return regime;
    	}
     
    }
    et la classe CalculVitesse.java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    public class CalculVitesse {
     
    	float vitesse;
     
    CalculVitesse(){}
     
    	public double getVitesse(){
    		return Interface.getInstance().getVoiture().getMoteur().getRegime()/100;
    	}
     
    }
    Dans l'Interface on crée une interface monInterface qui crée une voiture a partir de la classe Voiture qui crée un moteur et un calculateur de vitesse.

    ce qui pose problème c'est d'afficher dans le constructeur la valeur de la vitesse en faisant :

    System.out.println(monInterface.getVoiture().getVitesse());

    Cela ne fonctionne pas !
    Pouvez-vous m'expliquer pourquoi ?

    Merci !

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Points : 133
    Points
    133
    Par défaut
    Pourquoi tu fais monInterface.get...., fait juste getVoiture().getVitesse(); c'est déjà amplement suffisant. Et je pense que ton null pointer exception provient de cela : MonInterface n'est pas encore construit... Pour afficher correctement, fait ton affichage en dehors du constructeur...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 71
    Points : 42
    Points
    42
    Par défaut
    Merci !
    En effet il suffit de faire un getVoiture.get... !

    Comment bloquer 3h su un truc bete

  4. #4
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    c'est comme ça 90% du temps hélas... rien de tel qu'une bonne vision extérieure

  5. #5
    oca
    oca est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 354
    Points : 421
    Points
    421
    Par défaut
    Ton code est intéressant, et tu vas dans la bonne direction.
    il y a cependant pas mal de chose que l'on pourrais faire... disons... "autrement"

    Cela ne veut pas dire que ton code ne marche pas ou qu'il est "mauvais", mais il existe des méthodes "plus standard" pour faire ce genre de choses. je pense notamment à ce que l'on appelle les "Design Patterns".
    comme le Builder ou la (les) Factory

    Je te conseille vivement d'y jeter un oeil, je suis sûr que cela va t'intéresser.

    A+

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 71
    Points : 42
    Points
    42
    Par défaut Merci
    Merci pour vos solutions et vos conseils !
    Ciao !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/04/2009, 07h12
  2. [debutant] Un probleme lors d'une execution
    Par doditch77 dans le forum Débuter
    Réponses: 4
    Dernier message: 05/01/2008, 13h01
  3. [DEBUTANT]Probleme executer programme
    Par lavazavio dans le forum Dev-C++
    Réponses: 6
    Dernier message: 27/10/2007, 21h30
  4. [debutant]probleme servlet
    Par noOneIsInnocent dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 26/09/2003, 13h25
  5. [debutant] Probleme pour dessiner un simple cube
    Par scorpiwolf dans le forum DirectX
    Réponses: 6
    Dernier message: 02/07/2003, 20h29

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