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

Java Discussion :

Null Pointer Exception


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par défaut Null Pointer Exception
    Bonjour tout le monde, j'ai un problème avec ma classe TimeCut. TimeCut représente un temps (heures, minutes, secondes) et cette classe est immuable.
    J'ai une deuxième classe Time, qui celle ci à le même but mais n'est pas immuable.

    Je voulais avoir un constructeur avec en paramètre Time pour la classe TimeCut, mais j'obtient les erreurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Exception in thread "main" Exception in thread "Thread-0" java.lang.NullPointerException
    	at time.TimeCut.<init>(TimeCut.java:39)
    	at time.Chrono.now(Chrono.java:34)
    	at time.Test.main(Test.java:10)
    java.lang.NullPointerException
    	at time.Chrono.run(Chrono.java:16)
    Ce sont ces lignes qui poses problèmes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public TimeCut( Time t )
    	{
    		this.seconds 	= new Long(t.seconds());
    		this.minutes 	= new Long(t.minutes());
    		this.hours		= new Long(t.hours());
    	}
    Je veux tester un Chrono mais pour le coup je suis pas prêt de pouvoir, je comprend pas du tout d'où vient mon erreur.

    TimeCut
    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
     
    package time;
     
    public final class TimeCut 
    {	
    	public TimeCut( long seconds )
    	{
    		this.seconds 	= seconds;
    		this.minutes	= 0;
    		this.hours		= 0;
    	}
     
    	public TimeCut( long seconds, long minutes )
    	{
    		this.seconds 	= seconds;
    		this.minutes 	= minutes;
    		this.hours		= 0;
    	}
     
    	public TimeCut( long seconds, long minutes, long hours )
    	{
    		this.seconds 	= new Long(seconds);
    		this.minutes 	= new Long(minutes);
    		this.hours 		= new Long(hours);
    	}
     
    	public TimeCut( TimeCut tc )
    	{
    		this.seconds 	= tc.seconds();
    		this.minutes 	= tc.minutes();
    		this.hours		= tc.hours();
    	}
     
    	public TimeCut( Time t )
    	{
    		this.seconds 	= new Long(t.seconds());
    		this.minutes 	= new Long(t.minutes());
    		this.hours		= new Long(t.hours());
    	}
     
    	public long seconds() 	{return new Long(this.seconds);}
    	public long minutes() {return new Long(this.minutes);}
    	public long hours() 	{return new Long(this.hours);}
     
    	private final long seconds;
    	private final long minutes;
    	private final long hours;
    }
    Time
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    package time;
     
    /**
     * @author Xyliaris
     *
     */
     
    public class Time
    {	
    	public Time( long seconds )
    	{
    		this.seconds 	= seconds;
    	}
     
    	public Time( long seconds, long minutes )
    	{
    		this.seconds 	= seconds;
    		this.minutes 	= minutes;
    	}
     
    	public Time( Time t )
    	{
    		this.seconds 	= t.seconds();
    		this.minutes 	= t.minutes();
    		this.hours		= t.hours();
    	}
     
    	public Time( TimeCut tc )
    	{
    		this.seconds 	= tc.seconds();
    		this.minutes 	= tc.minutes();
    		this.hours		= tc.hours();
    	}
     
    	public void recompose()
    	{
    		if( this.seconds > 59 )
    		{
    			this.seconds = (long)(((float)(this.seconds) / 60 - this.seconds / 60 ) * 60 );
    			this.minutes += this.seconds / 60;
    		}
    		if( this.minutes > 59 )
    		{
    			this.minutes = (long)(((float)(this.minutes) / 60 - this.minutes / 60 ) * 60 );
    			this.hours += this.minutes / 60;
    		}
    		if( this.hours > 24 )
    		{
    			this.hours = 24;
    		}
    	}
     
    	public void addTime( Time t )
    	{
    		this.seconds 	+= t.seconds();
    		this.minutes 	+= t.minutes();
    		this.hours 		+= t.hours();
    	}
     
    	public void addTime( TimeCut tc )
    	{
    		this.seconds 	+= tc.seconds();
    		this.minutes 	+= tc.minutes();
    		this.hours 		+= tc.hours();
    	}
     
    	public long seconds() 	{return this.seconds;}
    	public long minutes() 	{return this.minutes;}
    	public long hours() 	{return this.hours;}
     
    	private long seconds;
    	private long minutes;
    	private long hours;
    }
    Chrono
    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
     
    package time;
     
    public class Chrono extends Thread
    {
    	public Chrono( boolean alwaysRun )
    	{
    		this.alwaysRun = new Boolean(alwaysRun);
    	}
     
    	public void run()
    	{
    		this.isStopped = false;
     
    		while(!this.isStopped || this.alwaysRun)
    		{
    			this.time_now.addTime(new TimeCut(1));
    			try {Thread.sleep(1000);} 
    			catch (InterruptedException e) {e.printStackTrace();}
    		}
    	}
     
    	public void alwaysRun( boolean value )
    	{
    		this.alwaysRun = value;
    	}
     
    	public boolean alwaysRun()
    	{
    		return new Boolean(this.alwaysRun);
    	}
     
    	public TimeCut now()
    	{
    		return new TimeCut(this.time_now);
    	}
     
    	public void reset()
    	{
    		this.isStopped = true;
    		this.time_now = new Time(0);
    	}
     
    	private boolean isStopped;
    	private boolean alwaysRun;
    	private Time 	time_now;
    }
    Vous pourriez m'aider ?

  2. #2
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 326
    Billets dans le blog
    12
    Par défaut
    Salut,

    Si le problème vient de l'extrait de code que tu précises alors le paramètre Time de ton constructeur TimeCut est null.

    PS: Tu as mis ton code dans des balises, mais il y a un problème copier/coller, l'indentation et surtout les sauts de lignes sont mauvais, du coup on ne peut pas faire la correspondance avec ton message d'erreur.

    A+
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Dans Chrono, tu déclares un attribut, time_now, de type Time, qui n'est pas initialisé, donc vaut null. Quand tu appelles la méthode now(), tu fais return new TimeCut(this.time_now);, donc tu passes null en paramètre du constructeur et donc sa plante lorsque this.seconds = new Long(t.seconds()); s'exécute, parce t est null (d'où une NullPointerException).

    Au passage, ça ne sert à rien tes long uneVariableLong = new Long( uneAutreVariableLong ); (idem pour Boolean). Déjà ça créé une instance de Long inutile, puisqu'on met la valeur dans la variable de type long (par unboxing) et une valeur de long, c'est une valeur de long. Il n'y a pas d'instance pour les types primitifs, 1 c'est 1, 42 c'est 42, 120778954 c'est 120778954.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mai 2014
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 227
    Par défaut
    Merci pour ta réponse, erreur bête x) et pour les primitifs je pensais juste que quand on doit créer une classe Immuable les primitifs devait aussi être pris en compte mais c'est juste les classes j'aurais du tout lire à propos de ça. Merci !

Discussions similaires

  1. Tomcat 5.5 Null Pointer Exception
    Par nono44200 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 07/04/2007, 10h00
  2. Null pointer Exception pour ma Fenetre
    Par LeXo dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 22/01/2007, 09h17
  3. Null Pointer Exception
    Par gloglo dans le forum Langage
    Réponses: 4
    Dernier message: 20/12/2006, 11h32
  4. [Struts] Null Pointer Exception
    Par n@n¤u dans le forum Struts 1
    Réponses: 1
    Dernier message: 01/08/2006, 13h10
  5. Null Pointer Exception
    Par snouppy dans le forum JBuilder
    Réponses: 3
    Dernier message: 13/06/2006, 21h53

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