Java:无法从Component类型对非静态方法createImage(int,int)进行静态引用

时间:2012-12-31 17:47:28

标签: java

  

可能重复:
  Cannot make a static reference to the non-static method

我正在尝试平铺背景,但现在我被卡住了。我已经阅读了createImage()的文档,但由于某些原因,某些内容是静态的,我无法弄清楚如何或为什么。

这是我的代码:

Paint paint;

    if (paint == null) {
        try {
            // Create TexturePaint instance the first time
            Component c;

            Image image = c.getToolkit().getImage("Background.png");

            int height = image.getHeight(null);
            int width = image.getWidth(null);

            BufferedImage bi = (BufferedImage) Component.createImage(width, height);
            Graphics2D biG2d = (Graphics2D) bi.getGraphics();

            biG2d.drawImage(image, 0, 0, Color.black, null);

            paint = new TexturePaint(bi, new Rectangle(0, 0, width, height));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

我在互联网上找不到一个答案,所以我不知道出了什么问题。 :(

非常感谢您的支持。

5 个答案:

答案 0 :(得分:2)

似乎createImage不是静态方法,因此您无法使用类名直接访问该方法。

createImage是实例方法,因此您需要实例化Component并从该实例调用createImage

示例:

Component comp = new Component(..);
comp.createImage(...);

答案 1 :(得分:1)

这一行:

BufferedImage bi = (BufferedImage) Component.createImage(width, height);

不正确。您正在对不存在的Component类进行静态调用。鉴于您已经声明了Component个实例但未初始化,代码中的更高位置,因此不确定您要完成的任务。如果你这样做了:

BufferedImage bi = (BufferedImage) c.createImage(width, height);

您将不再收到编译器警告,但运行代码会为您提供NPE。您可能希望更好地定义您要完成的任务。

答案 2 :(得分:0)

试试这个,调用Component实例上的方法:

BufferedImage bi = (BufferedImage) c.createImage(width, height);

答案 3 :(得分:0)

可能不是这一行

BufferedImage bi = (BufferedImage) Component.createImage(width, height);

你应该使用你的Component对象c,而不是:

BufferedImage bi = (BufferedImage) c.createImage(width, height);

但是,我没有看到c与目前的代码一样,除了null之外的其他任何东西。但也许这是一个单独的问题,你可以自己解决。

答案 4 :(得分:0)

据推测,您要将此TexturePaint对象设置为您从Paint获取的Graphics2D对象的Component属性。您需要使用相同的组件创建BufferedImage