int не может быть разыменован - PullRequest
6 голосов
/ 08 марта 2010

Я начинаю в Java (я учусь в микроэмиссии), и я получил эту ошибку: «int не может быть разыменован» в следующем классе:

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

Что я здесь не так делаю? Ну, я пришел из PHP и ECMAScripts, где я смог передать аргументы своей функции таким образом, так что я действительно не понимаю эту ошибку.

Ответы [ 3 ]

8 голосов
/ 08 марта 2010

g в drawString - это значение цвета, которое вы передали, а не ваша ссылка Graphics.Так что ошибка в том, что вы пытаетесь вызвать метод на int, что вы не можете сделать.

//            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 голосов
/ 08 марта 2010

Вы вызываете методы setColor и fillRect для g, который является параметром типа int.
Поскольку int не является ссылочным типом, вы не можете вызывать методы для него.

Возможно, вы хотите добавить параметр Graphics в функцию.

1 голос
/ 08 марта 2010

Пока g находится в методе рисования, объект класса Graphics (который содержит методы с именем setColor, fillRect и также drawString) в методе drawString равен g как Integer, который содержит значение для зеленого цвета. Особенно в строке g.setColor(r, g, b); вы используете g для установки цвета, а также в качестве аргумента для установки цвета. У int нет метода setColor (что также не имеет смысла), поэтому вы получаете ошибку. Вы, вероятно, хотите получить объект Graphics и в этом методе. Расширяя canvas, вы можете получить графический объект, вызвав getGraphics (), поэтому ваш пример может выглядеть так:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...