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

2D Java Discussion :

[java] probleme non déterministe


Sujet :

2D Java

  1. #1
    Membre confirmé Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut [java] probleme non déterministe
    Salut,

    j'ai un probleme avec du dessin en java :

    voici mon code.


    tout d'abord j'ai classe qui produit l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class DrawPanel extends JPanel{
    	/../
    	public void initBuffer(){
    		imgbuf = createImage(drawXsize,drawYsize);
    		gbuf = (Graphics2D)imgbuf.getGraphics();
    	}
    	/../
    }
    j'ai ensuite dans une autre classe qui appelle la fonction qui produit l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class TestPanel extends JPanel implements ActionListener{
    	public TestPanel(){
                    /../
    		drawPanel = new DrawPanel();
    		this.add(drawPanel);
    		/../
    	}
     
    	public voic actionPerformed(ActionEvent e){
    		if (e.getActionCommand().equals("init")){
    			drawPanel.initBuffer();
    		}
    	}
    }
    Alors l'erreur est un JavaNullPointerException sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gbuf = (Graphics2D)imgbuf.getGraphics();
    car imgbuf vaut null.

    maintenant, le problème c'est que l'erreur a pas tout le temps lieu et j'ai pas trouvé les facteurs déterminants.

    avant j'avais tout le temps cette erreur si j'initialisais le buffer dans le constructeur de la deuxième classe... je sais pas trop comment marche java en profondeur, mais je pense que c'est une histoire d'instanciation d'objet, et de l'ordre selon laquelle les différents objets constitutifs d'un objet sont instanciés.

    Enfin si vous avez des idées, merci. je sais que c'est pas très clair, alors posez moi des questions aussi

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Par défaut
    Salut,

    J'ai regarde la méthode createImage, celle ci te renvoie une image du panel, cependant si le panel n'est pas visible, cette image vaut null. Cette méthode est surtout utilisée pour faire du double buffering.
    Si tu veux créer une image je te conseille de créer un objet BuffererImage en spécifiant la taille.

    a+

  3. #3
    Membre confirmé Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut
    Salut, oui je cherche a faire du double buffering, donc je dois utiliser cette méthode.

    Sinon qu'entends tu par visible ? ça voudrait dire que les fois où j'ai mon exception, mon panel qui va dessiner n'est pas visible ? c'est bizarre s'il a été instancié et ajouter a mon panel source.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Par défaut
    Salut,

    Le panel n'est visible que lorsqu'il est dans une JFrame/JDialog/... visible.
    Je pense qu'un test isVisible est possible.
    Pour du double buffering il y a la methode setDoubleBuffered (boolean).
    Mais je ne m'y connais pas trop sur le fonctionnement...

    edit: pour vérifier si le problème vient de la, tu peux afficher l'état du panel : System.out.println (isVisible ()); avant d'utiliser l'image.

    a+

  5. #5
    Membre confirmé Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Par défaut
    Salut,

    en fait j'ai solutionner le problème, mais je sais pas trop comment... mais j'ai une petit idée, c'est peut être pas ça, mais en tout cas ça marche.

    Pour essayer d'expliquer, d'abord je dois dire que j'avais un autre problème un "setEnabled(true)" qui passait pas sur un élément (il restait grisé) alors que la méthode était bien appliqué (tracée au debuggeur)...

    Donc voila, c'était le bordel dans mon code, et plus particulièrement les thread était vraiment mal foutue (j'ai deux thread qui me servent a mettre a jour les données dessinées dans mon buffeur) : je les initialisait et lançait dans le constructeur.

    alors j'ai changé, j'ai créer une méthode initThread() qui lance mes deux threads et les met en pause, ensuite je lance initBuffer(). Et tout marche bien

    Voila, je sais pas trop pourquoi ça marche, mais en tout cas ça marche bien et c'est même plus rapide que la version précédente

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

Discussions similaires

  1. [JAVA] Probleme de connexion a ACCESS via une Servlet.
    Par rider4ever dans le forum Access
    Réponses: 8
    Dernier message: 10/02/2006, 18h45
  2. [FLASH 8][openAMF][remote][java]probleme d'import
    Par Invité dans le forum Flash
    Réponses: 5
    Dernier message: 02/12/2005, 17h51
  3. [java]probleme de case dans switch
    Par mousstik dans le forum Langage
    Réponses: 8
    Dernier message: 19/09/2005, 16h27
  4. Debutant en JAVA, problème avec 1er programme
    Par Gymerus dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 07/09/2005, 12h10
  5. Réponses: 2
    Dernier message: 16/08/2005, 09h21

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