2010-03-08 20 views
6

Sto cominciando a java (sto imparando in MicroEdition) ed ho ottenuto questo errore: "int non può essere dereferenziato" nella seguente classe:int non può essere dereferenziato

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()); 
    } 
} 

Che cosa sto facendo male qui ? Bene, sono venuto da PHP e ECMAScripts in cui sono riuscito a passare gli argomenti della mia funzione in questo modo, quindi davvero non capisco questo errore.

+0

Uh, grazie ragazzi, non avevo nemmeno notato che la variabile ha lo stesso nome del mio oggetto Graphics, ho pensato che il problema fosse mentre cercavo di ri-passare gli argomenti della funzione all'altra funzione (lo so, non-sense = P) e ho semplicemente dimenticato di passare un oggetto Graphics al metodo drawString. – Delta

risposta

8

Il g in drawString è il valore del colore che hai passato, non il tuo riferimento Graphics. Quindi l'errore si verifica quando stai cercando di chiamare un metodo su un int, che non puoi fare.

//   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

Si sta chiamando i setColor e fillRect metodi su g, che è un parametro di tipo int.
Poiché int non è un tipo di riferimento, non è possibile chiamare metodi su di esso.

Probabilmente si desidera aggiungere un parametro Graphics alla funzione.

1

Mentre g è nel metodo paint, un oggetto della classe Graphics (che contiene metodi denominati setColor, fillRect e anche drawString) nel metodo drawString è g definito come un Integer che contiene il valore per il colore verde. Soprattutto nella riga g.setColor(r, g, b); si usa g per impostare un colore su di esso e anche come argomento per l'impostazione del colore. int non ha alcun metodo setColor (anche questo non ha senso), quindi ottieni un errore. Probabilmente vuoi ottenere un oggetto Graphics anche con questo metodo. Come si estende tela, è possibile ottenere un grafico-oggetto chiamando getGraphics(), quindi il vostro esempio potrebbe essere la seguente:

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); 
} 
Problemi correlati