【问题标题】:"cannot find symbol method drawImage(java.awt.image.BufferedImage,<nulltype>,int,int)"“找不到符号方法 drawImage(java.awt.image.BufferedImage,<nulltype>,int,int)”
【发布时间】:2010-10-10 17:06:25
【问题描述】:

好的,现在我在 java 中使用 drawImage 已经有一段时间了,以前从未发生过这种情况。为什么在我的代码中找不到"drawImage(java.awt.image.BufferedImage,&lt;nulltype&gt;,int,int)"

导入 java.awt.*; 导入 javax.swing.*; 导入 javax.swing.JPanel; 导入 java.awt.event.*; 导入java.awt.image.*; 导入java.io.*; 导入 java.util.Arrays; 导入 javax.imageio.ImageIO; 公共类 imgtest 扩展 JFrame{ 缓冲图像 img; 图形g2d; /** * 创建imgtest 的新实例。 */ 公共 imgtest() { 文件 file = new File("test.png"); img = ImageIO.read(文件); } /** * @param args 命令行参数 */ 公共无效油漆(图形g) { g2d = (Graphics2D)g; g2d.drawImage(img, null, 0, 0); } 公共静态无效主要(字符串[]参数){ imgtest i = 新的 imgtest(); i.setSize(640,480); i.setVisible(true); i.repaint(); // 这里的TODO代码应用逻辑 } }

【问题讨论】:

    标签: java image swing


    【解决方案1】:

    您已将g2d 声明为Graphics 对象,而Graphics 没有drawImage(BufferedImage, BufferedImageOp, int, int) 方法。修复:替换行

    Graphics g2d;
    

    Graphics2D g2d;
    

    当Java 查找存储在这样一个变量中的对象的属性时,它总是使用变量的声明类型,即Graphics。除非您将其实际存储在 Graphics2D 类型的变量中,否则您将 g 转换为 Graphics2D 的事实并没有什么不同。

    【讨论】:

      【解决方案2】:

      您已将 g2d 声明为 Graphics 而不是 Grahphcs2d 对象

      考虑改变方法调用

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

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

      或更改您在 David 的帖子中对 Graphics 的定义

      【讨论】:

        【解决方案3】:

        与其他人所说的需要贴花一样,它是一个 Graphics2D,将其从实例变量中取出并使其成为局部变量。让一个实例变量只在一个方法中使用并且每次调用该方法时总是具有覆盖的值是没有意义的。实例变量用于在方法调用之间保持状态......你不是在这里这样做。

        public void paint(Graphics g)
        {
            final Graphics2D g2d;
        
            g2d = (Graphics2D)g;
            g2d.drawImage(img, null, 0, 0);
        }
        

        【讨论】:

        • 他所做的可能比代码 sn-p 中显示的更多;)
        • 根据我的经验,不幸的是,通常情况并非如此。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-23
        相关资源
        最近更新 更多