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 :

Eclaircissement sur le pointage vers une variable


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 24
    Points
    24
    Par défaut Eclaircissement sur le pointage vers une variable
    Voila la situation :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class UneClasse implements CaretListener{
     
    	MainWindow _mainWindow;
    	Config _config;
    	public UneClasse(MainWindow _mainWindow){
    		this._mainWindow = _mainWindow;
    		this._config = _mainWindow._config;
    	}
     
    	public void caretUpdate(CaretEvent _e){
    		process();
    	}
    	...
    dont voici la méthode process()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void process(){
    	System.out.println(_config._string);
    }
    je tiens à préciser que le constructeur de la classe _config contient :
    J'obtiens une "Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException".

    mais si je change la méthode process en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void process(){
    	System.out.println(_mainWindow._config._string);
    }
    cela marche parfaitement.
    Pourquoi ?
    Y-a-t-il une différence entre _mainWindow._config et _config dans ma classe UneClasse ?

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Ce serait plus simple avec les classes MainWindow et Config.

    Mais à mon avis, le problème vient de :

    this._config = _mainWindow._config;

    A mon avis, à ce moment (dans le constructeur de UneClasse), ._config est null et va donc le rester.

    Tu obtiens une copie de la référence, pas la référence directement, donc il faut que mainWindow._config soit déja initialisé. Si tu changes ._config dans MainWindow ça n'aura pas d'incidence dans UneClasse.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Je me suis penché sur la question et je ne pense pas que _config soit null au moment de la construction de UneClasse puisque _config est instancié lors de la construction de la _mainWindow. Or, la construction de la classe UneClasse a lieu apres la construction de cette dernière.

    Voici comment je me représente les choses:
    Un pointeur est constitué de deux faces : une face logicielle qui correspond à une adresse mémoire, et une face langage/code qui correspond au nom de la variable au sein du code source.
    Ainsi je fais this._config = this._mainWindow._config je ne fais que copier la face logicielle du pointeur depuis le symbole _mainWindow._config vers le symbole this._config(qui représente alors la nouvelle face langage/code du pointeur).
    Ai-je raison de parle comme ça ?
    Pourquoi dans ce cas la this._config ne semble pas etre équivalent à this._mainWindow._config ?






    Autre moment d'étonnement dans mon apprentissage du java :
    Mettons;
    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
     
    class UneClasse implements CaretListener{
     	JTextField _textField;
     
    	MainWindow _mainWindow;
    	public UneClasse(MainWindow _mainWindow){
    		this._mainWindow = _mainWindow;
    	}
     
    	public void caretUpdate(CaretEvent _e){
    		//x
    		if(...){
    		...//y
    		}
     
    		System.out.println(_textField.getText());
    	}
    	...
    dont voici la ligne critique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _textField = (JtextField)_e.getSource();
    Si j'insère cette dernière avant le if (en x), tout baigne. Mais si je la place dans le if (en y, j'obtiens une NullPointerException, quand bien même ai-je déclaré _textField en amont, et qu'il s'agit donc d'une variable de classe. Me trompes-je ? Que se passe-t-il ?


Discussions similaires

  1. Réponses: 11
    Dernier message: 16/10/2006, 14h05
  2. Pointage vers une base Acess .mde
    Par universdupc dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 28/09/2006, 19h14
  3. recuperer l'affichage sur un ecran dans une variable
    Par oussama127 dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2006, 23h34
  4. petite question sur la récupération d'une variable
    Par minusette dans le forum Langage
    Réponses: 6
    Dernier message: 17/11/2005, 16h57
  5. Lien vers une variable ?
    Par drinkmilk dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 22/02/2005, 09h55

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