nullpointerexeption.

nullpointerexeption. - Java - Programmation

Marsh Posté le 04-02-2003 à 22:49:45    

Salut

Code :
  1. import java.awt.*;
  2. class Spectre extends Canvas{
  3.     //constructor
  4.     Spectre(){
  5. setSize(256,256);
  6. setBackground(new Color(128,152,176));
  7. this.drawSpectre();
  8.     }
  9.     private void drawSpectre(){
  10. Graphics spc  = getGraphics();
  11. for(int i=0;i<=255;i++){
  12.     spc.setColor(Color.blue); <= c ici ke ça burne
  13.     spc.drawRect(i,i,1,1);
  14. }
  15.     }
  16.    
  17. }


 
bon voici une classe, d'un prog ke je fait en ce moment et le truc c ke j'ai un problem avec la class Graphics (enfin je pense ke ça vient de la) il me met un nullpointer exception et je vois pas pourkoi.
une idée?

Reply

Marsh Posté le 04-02-2003 à 22:49:45   

Reply

Marsh Posté le 04-02-2003 à 22:55:06    

Copie/colle le message d'erreur complet que te donne le compilo, pleaze...

Reply

Marsh Posté le 04-02-2003 à 22:55:28    

fykman a écrit :

Copie/colle le message d'erreur complet que te donne le compilo, pleaze...

le compilo sortira pas une nullPointerException :D


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 04-02-2003 à 22:56:27    

La fonction getGraphics() te renvoie null.

Reply

Marsh Posté le 04-02-2003 à 22:57:26    

--greg-- a écrit :

le compilo sortira pas une nullPointerException :D


 
merde, ok , je parlais de la JVM....

Reply

Marsh Posté le 04-02-2003 à 22:57:36    

et a quel endroit? je crois que le problème est clair: tu as une référence à un objet invalide (NULL) qui venir ssoit du fait que tu as oublier d'instancier un objet (ou de le référencer) soit du fait  que cette instanciation (ou obtention de référence) échoue.

Reply

Marsh Posté le 04-02-2003 à 22:58:27    

++Taz a écrit :

et a quel endroit? je crois que le problème est clair: tu as une référence à un objet invalide (NULL) qui venir ssoit du fait que tu as oublier d'instancier un objet (ou de le référencer) soit du fait  que cette instanciation (ou obtention de référence) échoue.


 
C'est getGraphics() qui renvoie null...

Reply

Marsh Posté le 04-02-2003 à 22:58:46    

si tu veux dessiner dans le canvas faut surcharger

Code :
  1. public void paint (Graphics g)

 
là, ton getGraphics() renvoie null

Reply

Marsh Posté le 04-02-2003 à 22:59:03    

Code :
  1. Exception in thread "main" java.lang.NullPointerException
  2.         at Spectre.drawSpectre(Spectre.java:19)
  3.         at Spectre.<init>(Spectre.java:10)
  4.         at WindowArea.<init>(WindowArea.java:40)
  5.         at HexaColor.main(HexaColor.java:10)


 et ça viens pas de la compilation mais de l'execution. dommage...  
 :D  :D  :D  
 
ça emepeche pas ke je veu bien ke tu m'aide evidament.
mais perso j'aime pas les nullpointer exception, je sait jamais ce ki burne.

Reply

Marsh Posté le 04-02-2003 à 22:59:24    

il est probable que ton objet spc soit "null"
... faut voir pq la methode getGraphics renvoie null ...
 
[:grilled]


Message édité par --greg-- le 04-02-2003 à 23:00:51

---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 04-02-2003 à 22:59:24   

Reply

Marsh Posté le 04-02-2003 à 23:00:10    

--greg-- a écrit :

il est probable que ton objet spc soit "null"
... faut voir pq la methode getGraphics renvoie null ...


 
Ca fait deux fois que je lui dis....
 
Lunatik3> gloop a raison tu dois surcharger la method paint pour pouvoir recuperer l'environnement graphique de ton objet.


Message édité par fykman le 04-02-2003 à 23:02:32
Reply

Marsh Posté le 04-02-2003 à 23:00:31    

--greg-- a écrit :

il est probable que ton objet spc soit "null"
... faut voir pq la methode getGraphics renvoie null ...


au moment de la construction le Graphics n'est pas encore dispo, d'ou le null

Reply

Marsh Posté le 04-02-2003 à 23:01:42    

gloop a écrit :


au moment de la construction le Graphics n'est pas encore dispo, d'ou le null

oui bon ça va, je l'ai vu que j'etais grillé :D


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 04-02-2003 à 23:08:08    

dc faut ke je refasse une methode paint c ça?  ou j'appelle l'original juste aprés : Graphics spc  = getGraphics(); (j'ai essayer la derniere et ça marchais pas.
merci de vos reponse fulgurante en tt cas. la je dois dire je suis impressionner.

Reply

Marsh Posté le 04-02-2003 à 23:10:26    

oui et tu vires aussi  ton this.drawSpectre();
 

Code :
  1. public void paint (Graphics spc)
  2. {
  3.    for(int i=0;i<=255;i++){
  4.       spc.setColor(Color.blue);
  5.       spc.drawRect(i,i,1,1);
  6.    }
  7. }


Message édité par gloop le 04-02-2003 à 23:12:05
Reply

Marsh Posté le 04-02-2003 à 23:10:44    

tu surcharges paint() en appelant super.paint() puis ton fait ton petit bizness derriere
apres, plus besoin d'appeler ta methode maison dans ton constructeur, aussi..


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 04-02-2003 à 23:11:02    

gloop a écrit :

oui et tu vires aussi  ton this.drawSpectre();
 

arrete de me griller tout le temps [:toad666]
 
 
 
:D


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 04-02-2003 à 23:14:24    

--greg-- a écrit :

tu surcharges paint() en appelant super.paint() puis ton fait ton petit bizness derriere
apres, plus besoin d'appeler ta methode maison dans ton constructeur, aussi..


il est pas obligatoire le super.paint () (cf doc)

Reply

Marsh Posté le 04-02-2003 à 23:15:44    

il est trop fort ce gloop !!  :jap:

Reply

Marsh Posté le 04-02-2003 à 23:16:50    

ça y est ça marche. merci les gars. pour de la performance, c de la performance. super merci. la j'aurai pas trouver tt seule.

Reply

Marsh Posté le 04-02-2003 à 23:17:45    

Code :
  1. import java.awt.*;
  2. class Spectre extends Canvas{
  3.     Graphics spc  = getGraphics();
  4.     //constructor
  5.     Spectre(){
  6. setSize(256,256);
  7. setBackground(new Color(128,152,176));
  8.      
  9.     }
  10.     public void paint(Graphics spc){
  11. for(int i=0;i<=255;i++){
  12.     spc.setColor(Color.blue);
  13.     spc.drawRect(i,i,1,1);
  14. }
  15.     }
  16.  
  17. }


 
bon voila le code final. et merci

Reply

Marsh Posté le 04-02-2003 à 23:18:02    

fykman a écrit :

il est trop fort ce gloop !!  :jap:  


gentil  :jap:  mais j'étais pas tout seul

Reply

Marsh Posté le 04-02-2003 à 23:18:52    

LunatiK3 a écrit :

Code :
  1. import java.awt.*;
  2. class Spectre extends Canvas{
  3.     Graphics spc  = getGraphics();
  4.     //constructor
  5.     Spectre(){
  6. setSize(256,256);
  7. setBackground(new Color(128,152,176));
  8.      
  9.     }
  10.     public void paint(Graphics spc){
  11. for(int i=0;i<=255;i++){
  12.     spc.setColor(Color.blue);
  13.     spc.drawRect(i,i,1,1);
  14. }
  15.     }
  16.  
  17. }


 
bon voila le code final. et merci


 
vire moi cette methode getGraphics() non de dieu !  ;)

Reply

Marsh Posté le 04-02-2003 à 23:26:05    

c fait. comment ça ce fait ke ça tourne sans?

Reply

Marsh Posté le 04-02-2003 à 23:27:53    

LunatiK3 a écrit :

c fait. comment ça ce fait ke ça tourne sans?


le graphics est passé en paramètre à paint ().
t'aurais pu lire le code avant de faire un copier/coller  :D

Reply

Marsh Posté le 04-02-2003 à 23:30:15    

LunatiK3 a écrit :

c fait. comment ça ce fait ke ça tourne sans?


 
Pour vraiment comprendre le pourquoi de tout ca, il faudrait que tu bosses un peu les tutoriaux de Sun sur Swing ou AWT qui sont tres bien fait...

Reply

Marsh Posté le 04-02-2003 à 23:32:18    

j'ai pas fait de copier coller, j'ai vu ke le graphics est foutu en parametre. Non c bon j'ai capter. qd paint est appeler il existe deja un graphics (on a pas besoin d'un creer un).
alors a koi ça sert getGraphics() alors. ds mon derneier prjet prog (je suis en iut info)les prof ds la source de base ils en mettais pas mal des  getGraphics () et j'en ai rajouter un ou deux.

Reply

Marsh Posté le 04-02-2003 à 23:35:56    

LunatiK3 a écrit :

j'ai pas fait de copier coller, j'ai vu ke le graphics est foutu en parametre. Non c bon j'ai capter. qd paint est appeler il existe deja un graphics (on a pas besoin d'un creer un).
alors a koi ça sert getGraphics() alors. ds mon derneier prjet prog (je suis en iut info)les prof ds la source de base ils en mettais pas mal des  getGraphics () et j'en ai rajouter un ou deux.  


 
2 propositions :  
- soit il utilise getGraphics() dans les cas ou c'est rellement necessaire et ce n'est pas le cas ici
- soit il code avec ses pieds
 
pour savoir laquelle de ces propositions est juste je te propose de lire ce que j'ai posté juste avant....

Reply

Marsh Posté le 04-02-2003 à 23:37:53    

gloop a écrit :


il est pas obligatoire le super.paint () (cf doc)

:jap:


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 04-02-2003 à 23:38:26    

ouai ok bosser le tut de sun sur awt et swing. je verais. merci.

Reply

Marsh Posté le 04-02-2003 à 23:43:16    

tant k'on y ai vous avez pas une methode plus cool, pour dessiner 1 pixel, parce ke le drawRect() c un peu sortir le char à boeus. j'ai pas trouvez mieux. ds graphics j'ai pas vu mieu en faites.

Reply

Marsh Posté le 05-02-2003 à 09:52:37    

drawLine(). Je sais, c'est un peu mieux mais pas beaucoup. Mais il n'y a pas de plot() ou de drawPoint().

Reply

Marsh Posté le 05-02-2003 à 13:03:05    

en faite j'ai hesiter entre les deux methode. j'esperai k'il y avait mieu mais tanpis.
merci

Reply

Marsh Posté le 05-02-2003 à 13:23:31    

c génial Java, obligé de dessiner une ligne ou un rectangle pour un simple pixel :d
trodlaballe ce langage  [:xp1700]


Message édité par Serial Coder le 05-02-2003 à 13:25:40

---------------
Je code en série et en parallèle
Reply

Marsh Posté le 05-02-2003 à 14:33:32    

La notion de pixel n'a de sens que lorsqu'on manipule la mémoire vidéo dans une résolution donnée. Et les programmes de haut niveau comme les programmes Java ne sont pas censés travailler dans une résolution donnée (bien sûr quand on manipule un bitmap, c'est un peu différent).
 
De toute façon, quiconque a travaillé sur les algorithmes bas-niveau de dessin vous confirmera que dessiner une ligne dont les points de départ et d'arrivée sont les mêmes n'est pas plus coûteux que dessiner un point.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed