Я начинаю в 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, где я смог передать свои аргументы функции этот путь, таким образом, я действительно не понимаю эту ошибку.
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);
}
Пока 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);
}
Вы вызываете методы setColor
и fillRect
в g
, который является параметром типа ] int
.
Поскольку int
не является ссылочным типом, вы не можете вызывать для него методы.
Возможно, вы захотите добавить в функцию параметр Графика
.