"не удается найти метод символа drawImage (java.awt.image.BufferedImage, <nulltype>, int, int)" - PullRequest
1 голос
/ 02 марта 2009

Хорошо, теперь я уже некоторое время использую 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 <code>imgtest</code>.
     */
    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
    }
}

Ответы [ 3 ]

4 голосов
/ 02 марта 2009

Вы объявили g2d как объект Graphics, а Graphics не имеет метода drawImage(BufferedImage, BufferedImageOp, int, int). Исправлено: заменить строку

Graphics g2d;

с

Graphics2D g2d;

Когда Java ищет атрибуты объекта, который хранится в такой переменной, как эта, она всегда использует объявленный тип переменной, а именно Graphics. Тот факт, что вы преобразовали g в Graphics2D, не имеет значения, если вы на самом деле не сохраните его в переменной типа Graphics2D.

1 голос
/ 02 марта 2009

Наряду с тем, что другие говорили о необходимости декальцировать, это Graphics2D, извлекать его из переменных экземпляра и делать его локальной переменной. Нет смысла иметь переменную экземпляра, которая используется только в одном методе и всегда имеет значение, перезаписываемое при каждом вызове метода. Переменные экземпляра используются для сохранения состояния между вызовами методов ... здесь вы этого не делаете.

public void paint(Graphics g)
{
    final Graphics2D g2d;

    g2d = (Graphics2D)g;
    g2d.drawImage(img, null, 0, 0);
}
0 голосов
/ 02 марта 2009

Вы объявили g2d как Graphics, а не Grahphcs2d объект

Попробуйте либо изменить вызов метода с

 g2d.drawImage(img, null, 0, 0);

до

 (Graphics2d) g2d.drawImage(img, null, 0, 0);

или измените определение графики, как в сообщении Дэвида

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...