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 :

[Graphics2D]pb, fatal exception occured


Sujet :

2D Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 31
    Points : 19
    Points
    19
    Par défaut [Graphics2D]pb, fatal exception occured
    bonjour
    je suis en train de faire une classe pour trasser des graphiques
    et j'ai un probleme, c'est que lorsque j'execute mon programme
    j'ai l'erreur cité dans le titre, puis dans eclipse ( suis sous eclipse )
    j'ai ce message :
    java.lang.NullPointerException
    at com.elgrapheur.graph.Histogramme.drawPetiteCroix(Histogramme.java:30)
    at com.elgrapheur.graph.Histogramme.main(Histogramme.java:45)
    Exception in thread "main"
    et la ligne 30 correspond a ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void drawPetiteCroix() //temporairement pour tester...
    	{
    		for(int i=pos;i<this.maxAbs;i++)
    		{
    			int apos=this.maxOrd+10;
    			int apos2=this.maxOrd-10;
     
    				g2.drawLine(pos,apos,this.maxAbs,apos2);//ICI = ligne N°30
    		}
     
    	}
    dans ce bout de code pos vaut 45 et maxAbs vaut 200 ( tous les deux de type int )
    merci de m'aider si vous avez une idée
    pour l'instant je suis 100% blocké parce-que les petites croix que je cherche a dessiner seront determinantes pour le placement des autres composants

    ps:
    si vous voulez je peux mettre plus de code ?

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2004
    Messages : 138
    Points : 125
    Points
    125
    Par défaut
    Quand un Nullpointer arrive c'est qu'un object que tu utilise n'est pas initialisé.
    Je pense dans ton cas que g2 n'est pas déclaré. Regarde si tu l'initialise bien ou fait un contrôle avant de lancer drawLine controle si g2 n'est pas égal à NULL.
    Mais c'est peut-être autre chose. Ca peut ptetre t'aider...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    bonsoir Shiftane,
    tu as 100% raison c'est exactement ça,
    seulement je ne vois pas comment faire puisque Graphics2d n'est pas
    instanciable ( c'est ce que me dit eclipse quand je met g2=new Graphics2D(); )
    le probleme c'est que je ne vois pas comment faire, je voudrais pouvoir dessiner par dessu un Graphics2D
    voici un morceau de ma classe pour que vous voyez l'endroit ou j'initialise g2
    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 Histogramme extends Graphique
    {
    private int min,maxOrd,maxAbs;//coord
    private int pos=45;//par rapport au bord gauche...
    Graphics2D g2;
    	Histogramme(int maxO,int min,int maxA)
    	{
    		this.min=min;//ordonnees/abs
    		this.maxOrd=maxO;
    		this.maxAbs=maxA;
    	}
    	public void paint(Graphics g)
    	{
    		g2=(Graphics2D) g;//ICI
    		g2.drawLine(pos,pos,pos,this.maxOrd);// par rapport a gauche, par rapport a hauteur
    		g2.drawLine(pos,this.maxOrd,this.maxAbs,this.maxOrd);
    	}
    donc comment faire autrement (mais de maniere a ce que je puisse dessiner des lignes par dessu grace a la methode "drawPetiteCroix" )

    ps:
    ce dont je me sers pour faire cette classe, c'est le tuto initiation au dessin de ce site+ la doc de sun

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut
    Il te faut écrire :

    Graphics2D g2 = (Graphics2D) g;
    g2.drawLine...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    oui, ça je savais, mais ce que je ne sais pas
    c'est le faire depuis une methode ( pas dans la methode paint )
    de préference une methode privée...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut
    et si tu veux activer l'anti-aliasing pour que ton dessin soit plus joli :

    RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

    g2.setRenderingHints(qualityHints);

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Foub
    et si tu veux activer l'anti-aliasing pour que ton dessin soit plus joli
    oula, non, doucement pour le moment je vais essayer un truc moche qui marche
    mais je note pour apres

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2004
    Messages : 138
    Points : 125
    Points
    125
    Par défaut
    Quand est ce que t'appelle ta méthode qui marche pas ??
    Car si elle n'est pas dans le context de paint ca va pas marcher.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    je l'appelle dans main()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public static void main(String [] args)
    	{
    		Histogramme toto=new Histogramme(200,0,200);//Max Hauteur, minimum ( 0 ), max horizon
    		toto.drawPetiteCroix();//*****************
    		JFrame fen=new JFrame("test");
    		fen.getContentPane().add(toto);
    		fen.setSize(500,500);
    		.....etc
    	}

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut
    je t'ai retrouvé la commande que tu as besoin...
    mets dans ta méthode :

    Graphics g = this.getGraphics();

    Et le tour est joué...

  11. #11
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2004
    Messages : 138
    Points : 125
    Points
    125
    Par défaut
    Je comprends pas tout a fait ce que tu veux faire dans la main ??
    Explique un peu la logique de ton main et surtout les phases du code mis au dessus.
    Merci

  12. #12
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 50
    Points : 48
    Points
    48
    Par défaut
    ca ne sert a rien de faire un drawQuelqueChose dans un Main rien ne prendra effet
    seul sera dessiner se qui est dans la méthode paint.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Fab : j'ai essayer ( j'ai peut-etre pas fait comme il faut...)
    et ça n'a pas marché, la frame est blanche, sans rien

    sinon la seule solution que j'ai trouvé c'est :
    drawPetiteCroix(g2);
    dans la methode public void paint()...

    Je comprends pas tout a fait ce que tu veux faire dans la main ??
    Explique un peu la logique de ton main et surtout les phases du code mis au dessus.
    desolé,
    en fait pour le moment la methode main est presente pour faire des test
    mais elle ne se situera pas dans cette classe, elle sera dans l'ihm ( surement une classe nommé mainWindow... )

    ce que je veux faire c'est
    -creer ma classe qui dessine un graphique des le constructeur ( au debut juste les dex lignes abscisse et ordonnées) ( jusque-la ça va...)
    -pouvoir faire nomdeLobj.drawPetiteCroix(); ( qui se chargera de dessinner des petits traits symbolisant les valeurs )

    euh donc je rectifie, ma methode doit etre public void drawPetiteCroix et non private ( en meme temps ça ne change rien au probleme...)

    merci, a vous deux de vous interessé

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par mabs
    ca ne sert a rien de faire un drawQuelqueChose dans un Main rien ne prendra effet
    seul sera dessiner se qui est dans la méthode paint.
    en gros tu me dis qu'il n'y a pas de solution a ce que je veux c'est bien ça ?
    je veux juste pouvoir faire
    nomobj.drawPetiteCroix();

  15. #15
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 50
    Points : 48
    Points
    48
    Par défaut
    se qu'il faut que tu fasse c'est plutot
    tu declare un boolean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    boolean dessiner_croix;
    dans ton main tu le passe a true, et tu repaint() juste apres.

    Dans paint() tu fais test pour savoir si tu doit dessiner la croix

    tu peu aussi creer un objet croix et quand celui la n'est pas null tu la dessine

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    arf oui, mais c'est pas tip/top quand meme,
    car juste pour dessiner les petites barres ça donnerai
    obj.dessinnercroix=true;
    obj.repaint();
    enfin bon tant pis, j'aurais esperé pouvoir faire simplement obj.drawCroix
    dommage que l'on ne puisse pas...
    je vais quand meme continuer de chercher, puis si je trouve, ben je poste
    en attendant si vous avez d'autres idées n'hesitez pas merci
    bonne soirée/nuit a tous

  17. #17
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2004
    Messages : 138
    Points : 125
    Points
    125
    Par défaut
    C'est comme ca qu'il faut faire...
    Rien ne t'empeche ensuite pour structurer ton prog de mettre dans le paint une méthode à laquelle tu passera ton "g" pour l'utiliser.
    Mais la fonction que tu appelles dans le main doit juste pouvoir modifier quelque chose qui n'est pas un element graphique et tu fais ensuite un update pour pouvoir faire les modifications possible.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 31
    Points : 19
    Points
    19
    Par défaut
    bon tant pis alors.
    je vais faire comme ça,
    merci a tous

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/10/2007, 11h42
  2. [SQL2K5] Process [SPID] generated fatal exception
    Par elsuket dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/08/2007, 10h19
  3. [debutant] "exception occured executing command line"
    Par hariri dans le forum Eclipse Java
    Réponses: 13
    Dernier message: 22/05/2007, 10h06
  4. Réponses: 2
    Dernier message: 27/09/2005, 16h32
  5. Error 80020009. Exception occurred
    Par twizell dans le forum ASP
    Réponses: 5
    Dernier message: 14/04/2005, 20h35

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