-2

可能重复:
无法对非静态方法进行静态引用

我正在尝试平铺背景,但现在我被卡住了。我已经阅读了 的文档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();
        }
    }

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

非常感谢您的支持。

4

5 回答 5

2

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

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

例子:

Component comp = new Component(..);
comp.createImage(...);
于 2012-12-31T17:48:47.533 回答
1

这一行:

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

是不正确的。您正在对Component不存在的类进行静态调用。不确定您要完成什么,因为您Component在代码中更高层声明了一个实例,但未初始化。如果你这样做:

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

您将不再收到编译器警告,但运行代码将为您带来 NPE。您可能想要更好地定义您要完成的工作。

于 2012-12-31T17:49:17.657 回答
0

大概您要将此TexturePaint对象设置为您从 a 获得Paint的对象的属性。您将需要使用相同的组件创建您的。Graphics2DComponentBufferedImage

于 2012-12-31T18:20:47.173 回答
0

可能不是这条线

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

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

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

但是,我看不到 c 在当前代码中除了 null 之外的其他任何内容。但也许这是一个单独的问题,您将能够自己解决。

于 2012-12-31T17:52:01.520 回答
0

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

BufferedImage bi = (BufferedImage) c.createImage(width, height);
于 2012-12-31T17:50:24.727 回答