интервал не может быть разыменован

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

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, где я смог передать свои аргументы функции этот путь, таким образом, я действительно не понимаю эту ошибку.

6
задан Delta 8 March 2010 в 14:36
поделиться

3 ответа

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);
}
8
ответ дан 9 December 2019 в 22:32
поделиться

Пока g находится в методе paint- объект класса 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);
}
1
ответ дан 9 December 2019 в 22:32
поделиться

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

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

2
ответ дан 9 December 2019 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: