int non può essere dereferenziato

Sto iniziando con java (sto imparando in microedizione) e ho ricevuto questo errore: “int non può essere dereferenziato” nella seguente class:

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

Cosa sto facendo di sbagliato qui? Bene, sono venuto da PHP e ECMAScripts in cui sono stato in grado di passare gli argomenti della mia funzione in questo modo, quindi davvero non capisco questo errore.

La g in drawString è il valore del colore che hai passato, non il tuo riferimento Graphics . Quindi l’errore è quando stai provando a 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); } 

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

Probabilmente vuoi aggiungere un parametro Graphics alla funzione.

Mentre g è nel metodo paint, un object della class 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 object Graphics anche con questo metodo. Mentre estendi il canvas, puoi ottenere un object grafico chiamando getGraphics (), così il tuo esempio potrebbe assomigliare a questo:

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