2010-03-08 15 views
6

estoy empezando en Java (estoy aprendiendo en MicroEdition) y me dio este error: "int no se puede eliminan las referencias" en la siguiente clase:int no se puede dereferenced

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é estoy haciendo mal aquí ? Bueno, vengo de PHP y ECMAScripts, donde pude pasar los argumentos de mi función de esta manera, así que realmente no entiendo este error.

+0

Uh, gracias chicos, ni siquiera me había dado cuenta de que la variable tiene el mismo nombre de mi objeto Graphics, pensé que el problema era al tratar de volver a pasar los argumentos de la función a la otra función (lo sé, sin sentido = P) y me olvidé de pasar un objeto Graphics al método drawString. – Delta

Respuesta

8

El g en drawString es el valor de color que ha pasado, no su referencia Graphics. Entonces, el error es cuando intentas llamar a un método en un int, que no puedes hacer.

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

Está llamando a los métodos setColor y fillRect en g, que es un parámetro de tipo int.
Dado que int no es un tipo de referencia, no puede llamar a métodos en él.

Probablemente desee agregar un parámetro Graphics a la función.

1

Mientras g está en el método paint un objeto de la clase Graphics (que contiene métodos denominados setColor, fillRect y drawString) en el método drawString se define g como un entero que contiene el valor para el color verde. Especialmente en la línea g.setColor(r, g, b);, utiliza g para establecer un color y también como argumento para establecer el color. int no tiene ningún método setColor (que tampoco tiene sentido), por lo que se obtiene un error. Probablemente también desee obtener un objeto Graphics en este método. Al extender la lona, ​​se puede obtener una gráfica de objeto llamando getGraphics(), por lo que su ejemplo podría tener este aspecto:

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