可能重复:
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();
}
}
我在互联网上找不到一个答案,所以我不知道出了什么问题。 :(
非常感谢您的支持。
答案 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
。