2010-03-08 5 views
6

Je commence en java (j'apprends à MicroEdition) et j'ai obtenu cette erreur: « int ne peut pas être déréférencé » dans la classe suivante:int ne peut pas être déréférencé

class DCanvas extends Canvas{ 
    public DCanvas(){ 

    } 

    public void drawString(String str, int x, int y, int r, int g, int b){ 
     g.setColor(r, g, b); //The error is here 
     g.drawString(str, x, y, 0); //and here 
    } 

    public void paint(Graphics g){ 
     g.setColor(100, 100, 220); 
     g.fillRect(0, 0, getWidth(), getHeight()); 
    } 
} 

Qu'est-ce que je fais mal ici ? Eh bien, je suis venu de PHP et ECMAScripts où je pouvais passer mes arguments de cette façon, donc je ne comprends vraiment pas cette erreur.

+0

Euh, merci les gars, je n'avais même pas remarqué que la variable a la même nom de mon objet Graphics, je pensais que le problème était en essayant de passer à nouveau les arguments de la fonction à l'autre fonction (je sais, non-sense = P) et j'ai juste oublié de passer un objet Graphics à la méthode drawString. – Delta

Répondre

8

La g dans drawString est la valeur de couleur que vous avez passée, pas votre référence Graphics. Donc, l'erreur est lorsque vous essayez d'appeler une méthode sur un int, ce que vous ne pouvez pas faire.

//   Passing an integer 'g' into the function here | 
//               V 
public void drawString(String str, int x, int y, int r, int g, int b){ 
// | This 'g' is the integer you passed in 
// V 
    g.setColor(r, g, b); 
    g.drawString(str, x, y, 0); 
} 
2

Vous appelez les méthodes sur gsetColor et fillRect, ce qui est un paramètre de type int. Comme int n'est pas un type de référence, vous ne pouvez pas appeler des méthodes.

Vous souhaitez probablement ajouter un paramètre Graphics à la fonction.

1

Alors que g est dans la méthode paint, un objet de la classe Graphics (contenant les méthodes setColor, fillRect et drawString) dans la méthode drawString est défini comme entier qui contient la valeur de la couleur verte. Surtout dans la ligne g.setColor(r, g, b); vous utilisez g pour définir une couleur et aussi comme argument pour le réglage de la couleur. int n'a pas de méthode setColor (cela n'a pas non plus de sens), donc vous obtenez une erreur. Vous voulez probablement aussi avoir un objet Graphics dans cette méthode. Comme vous étendez la toile, vous pouvez obtenir un graphique-objet en appelant getGraphics(), de sorte que votre exemple pourrait ressembler à ceci:

public void drawString(String str, int x, int y, int r, int g, int b){ 
    getGraphics().setColor(r, g, b); 
    getGraphics().drawString(str, x, y, 0); 
} 
Questions connexes