Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Langage Java > [Java] Problème avec la classe Graphics > Lecture du sujet

[Java] Problème avec la classe Graphics

java.lang.NullPointerException o_O

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne Raton # Posté le 31/01/2006 à 18:49:12
Avatar
Groupe : Membres
Bonjour à tous,

Je fais du Java depuis quelques mois maintenant mais je profite de cette semaine de congé pour approfondir ma connaissance du Java en tentant de comprendre comment implanter des images dans mes programmes Java et autres fonctionnalités de dessin à la souris. ^^
Dans ce que j'ai esasyé, j'ai voulu représenter un jeu avec une carte et un personnage dans le PanneauET.

J'ai donc créé une fenêtre avec une barre de menus et deux panels: PanneauMenu et PanneauET (ET pour Espace de Travail). Jusque là, niquel.
Seulement, je voudrais pouvoir mettre des images ou dessiner dans le panel PanneauET. J'ai donc essayé ça:

Code : Java
import java.awt.*;
import java.awt.event.*;

public class Helium
{
        public static void main(String args[])
        {
                Helium H=new Helium();//le main lance l'objet Helium
        }
       
        public Helium()//constructeur d'Helium
        {
                Frame Lafenetre=new Frame("Projet Helium");//on créée une nouvelle fenêtre (Frame Lafenetre) avec le titre du projet en paramètre
                Lafenetre.setSize(1200,900);//donne la taille de Lafenetre
                Lafenetre.setLocation(100,100);//donne la position de Lafenetre
                Lafenetre.addWindowListener(new WindowAdapter()
                {
                        public void windowClosing(WindowEvent event)
                        {
                                System.exit(0);
                        }
                });//permet de fermer Lafenetre en cliquant sur la croix sur fond rouge
                Lafenetre.setLayout(new BorderLayout());//Layout du type Border, qu'on subdivisera
               
                //Création des Panel PanneauMenu et PanneauET
                PanneauMenu Est=new PanneauMenu();
                Lafenetre.add(Est,BorderLayout.EAST);
                Est.setSize(100,100);
                Est.setVisible(true);
                     
                PanneauET Centre=new PanneauET();//création de deux panels pour séparer le menu (à l'est) de l'espace de travail (au centre)
                Lafenetre.add(Centre,BorderLayout.CENTER);//positionnement des 2 panels
               
                //création de la barre de menu   
                MenuBar LaBarre = new MenuBar();
                Menu programme = new Menu("Programme");//Un menu pour la gestion du programme en lui-même
                LaBarre.add(programme);
                Menu  interactions = new Menu("Interactions");//un menu pour interagir dans le programme
                LaBarre.add(interactions);
                Menu aide = new Menu("Aide");//un menu proposant diverses aides
                LaBarre.add(aide);
                Lafenetre.setMenuBar(LaBarre);//installation de la barre
       
                MenuItem Quitter= new MenuItem("Quitter");
                Quitter.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent event)
                {System.exit(0);}});
                programme.add(Quitter);
             
                //J'appelle la fonction paint de Centre pour que des dessins soient faits dans Centre
                Centre.paint(Centre.getGraphics()/*leperso*/); <couleur nom="rouge">//ça foire à cet endroit</couleur>

                Lafenetre.setVisible(true);//Lafenetre doit s'afficher
        }
}

Ca, c'est la classe principale.
J'ai placé les classes PanneauMenu et PanneauET dans des classes à part pour soulager un peu la classe principale (c'est déjà fort lourd comme ça :-° )

Voici la classe PanneauET, les autres classes ne posant pas de problème:
Code : Java
import java.awt.*;



public class PanneauET  extends Panel//extends JInternalFrame
{
         private Image persoImage;
         
         PanneauET()
         {
                 this.setBackground(java.awt.Color.gray);
         }
         public void paint(/*Personnage leperso*/Graphics g)
         {
                /*persoImage=leperso.getImage();
                 g.drawImage(persoImage,100,100,10,10,this);*/
<couleur nom="rouge">//mis en commentaire car ça foire</couleur>
                 //g.drawLine(10,10,0,0); <couleur nom="rouge">//j'ai essayé ceci mais ça foire aussi</couleur>
                 System.out.println(g.toString());<couleur nom="rouge">//même ça, ça foire</couleur>
         }
}


L'erreur renvoyé est celle-ci (sous Eclipse):
Exception in thread "main" java.lang.NullPointerException
at PanneauET.paint(PanneauET.java:18)
at Helium.<init>(Helium.java:63)
at Helium.main(Helium.java:9)


Si je ne mets rien dans la méthode paint concernant le Graphics g, aucune erreur n'est affichée et tout se passe bien.
Quelqu'un pourrait-il m'aider à résoudre ce petit problème s'il-vous-plaît? Les nombreux tutos que j'ai lu à ce sujet ne m'ont pas aidés car ils réexpliquent tous la même chose, mais ce n'est jamais ce que je cherche à savoir. :euh:

Merci d'avance à ceux qui prendront la peine! ;)
Raton

PS: Je suis honteux là: j'ai résolu mon propre problème. :honte:
J'ai trouvé en fait qu'en ne cherchant pas à appeler la péthode paint(Graphic g) depuis l'extérieur, tout se passe bien. >_<
En virant la ligne "Centre.paint(Centre.getGraphics()/*leperso*/);" de la classe Helium, ça a fini par marcher.
J'en déduis donc que la méthode paint() de toute classe est appelée automatiquement. (je le mets en gras pour que d'autres le voient rapidement s'ils ont le même problème que j'ai eu et s'ils parcourent ce forum)
Une journée de recherche pour trouver ça.
Édité le 31/01/2006 à 22:41:35 par Raton
Hors ligne Asgeir # Posté le 02/02/2006 à 18:56:43
Canardesque
Avatar
Groupe : Bannis
Euh ... les <couleur = rouge> dans ton code c'est une rreur de Zér0c0de hein ?

Ensuite, saches qu'il est déontologiquement interdit d'appeler directement la méthode paint d'un quelquonque objet. Elle est appelée automatiquement pour le premier dessin de son objet ; si tu désires redessiner l'objet, tu appelles plutot la méthode repaint().
Hors ligne Raton # Posté le 02/02/2006 à 22:14:05
Avatar
Groupe : Membres
Les <couleur=rouge> sont en effet soit un petit foirage du Zérocode soit plus probablement une erreur de ma part. Je voulais simplement que les commentaires décrivant les endroits précis des problèmes apparaissent dans une couleur un peu plus prononcée que du gris. Tant pis... :-°

Pour la suite de ton message, je t'avoue que je bidouille pour comprendre comment l'affichage de graphismes fonctionne. Pour mon problème, je n'avais d'ailleurs lu ça:
Citation : Asgeir
Elle est appelée automatiquement pour le premier dessin de son objet ; si tu désires redessiner l'objet, tu appelles plutot la méthode repaint().
sur aucun tuto :) . j'ai beaucoup appris par les tutoriels mais ce détail-là, je ne l'avais vu nulle part.

Dans la fin de mon message, tu pourras voir que j'ai rajouté un PS où je signale que j'ai viré cet appel de paint() pour que le dessin s'affiche.

Merci d'avoir répondu à mon message, même si j'avais finalement trouvé moi-même comment le résoudre le bricoler pour qu'il fonctionne. :euh:
Hors ligne pierrot la lune # Posté le 03/02/2006 à 08:53:27
serial nounours
Avatar
Groupe : Membres
fait deja ça
System.out.println(g);
au lieu de ça System.out.println(g.toString());
car de toute maniere ce sera la methode toString qui sera appelé et au pire cela affichera null.

pour l'appel de ta methode paint tu a inverser les parametres (perso puis G) et non l'inverse

(o`---'o)
| 0 o |
(_(°)_)
/.-.
oO0.0Oo
(.)^(.)


 

Retour au forum "Langage Java" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 525 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0508s (0.0194s)