«невозможно найти метод символа drawImage(java.awt.image.BufferedImage,<nulltype>,int,int)»
Вопрос
Хорошо, я уже некоторое время использую drawImage в Java, и такого раньше никогда не случалось.Почему он не может найти "drawImage(java.awt.image.BufferedImage,<nulltype>,int,int)"
в моем коде?
import java.awt.*;
import javax.swing.*;
import javax.swing.JPanel;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.util.Arrays;
import javax.imageio.ImageIO;
public class imgtest extends JFrame{
BufferedImage img;
Graphics g2d;
/**
* Creates a new instance of imgtest
.
*/
public imgtest() {
File file = new File("test.png");
img = ImageIO.read(file);
}
/**
* @param args the command line arguments
*/
public void paint(Graphics g)
{
g2d = (Graphics2D)g;
g2d.drawImage(img, null, 0, 0);
}
public static void main(String[] args) {
imgtest i = new imgtest();
i.setSize(640,480);
i.setVisible(true);
i.repaint();
// TODO code application logic here
}
}
Решение
Вы заявили g2d
как Graphics
объект, и Graphics
не имеет drawImage(BufferedImage, BufferedImageOp, int, int)
метод.Исправить:заменить строку
Graphics g2d;
с
Graphics2D g2d;
Когда Java ищет атрибуты объекта, хранящегося в такой переменной, она всегда использует объявленный тип переменной, а именно: Graphics
.Тот факт, что вы кастовали g
к Graphics2D
не имеет значения, если вы на самом деле не сохраните его в переменной типа Graphics2D
.
Другие советы
Наряду с тем, что другие говорили о необходимости декодирования, это Graphics2D, выньте его из переменных экземпляра и сделайте локальной переменной.Нет смысла иметь переменную экземпляра, которая используется только в одном методе и значение которой всегда перезаписывается при каждом вызове этого метода.Переменные экземпляра используются для сохранения состояния между вызовами методов...ты здесь этого не делаешь.
public void paint(Graphics g)
{
final Graphics2D g2d;
g2d = (Graphics2D)g;
g2d.drawImage(img, null, 0, 0);
}
Вы заявили g2d
как Graphics
и не Grahphcs2d
объект
Рассмотрите возможность изменения вызова метода с
g2d.drawImage(img, null, 0, 0);
к
(Graphics2d) g2d.drawImage(img, null, 0, 0);
или измените свое определение графики, как в сообщении Дэвида