«невозможно найти метод символа drawImage(java.awt.image.BufferedImage,<nulltype>,int,int)»

StackOverflow https://stackoverflow.com/questions/601172

  •  03-07-2019
  •  | 
  •  

Вопрос

Хорошо, я уже некоторое время использую 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);

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top