`Graphics.drawImage()`不会绘制

时间:2016-05-16 06:08:07

标签: java drawimage

很简单,我无法绘制这张图片。

public class RenderMap extends JPanel {

    static BufferedImage brick;
    static BufferedImage groundb;

    public static void main(String[] args) {
        JFrame window = new JFrame("Super Mario");
        RenderMap content = new RenderMap();
        window.setContentPane(content);
        window.setBackground(Color.WHITE);
        window.setSize(1200, 800);
        window.setLocation(100,0);
        window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        window.setResizable(false);
        window.setVisible(true);

        try {
            brick = ImageIO.read(new File("SuperMario/brick.png"));
        } catch (IOException e) {
        }

        try {
            URL url = new URL("SuperMario/brick.png");
            brick = ImageIO.read(url);
        } catch (IOException e) {
        }
        try {
            groundb = ImageIO.read(new File("SuperMario/ground.png"));
        } catch (IOException e) {
        }
        try {
            URL url = new URL("SuperMario/ground.png");
            groundb = ImageIO.read(url);
        } catch (IOException e) {
        }
    }

    public Ground ground;

    public RenderMap() {}

    public void paintComponent(Graphics g) {

        if(ground == null) {
            ground = new Ground();
        }
        ground.draw(g);
    }

    public class Ground implements ImageObserver {

        Ground(){}

        void draw(Graphics g) {
            g.drawImage(groundb, 0, 0, 1200, 800, this);
            g.fillOval( 8,  8, 16, 16);
        }

        @Override
        public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
            // TODO Auto-generated method stub
            return false;
        }
    }
}

这绘制了椭圆形,但不是图像。我尝试换到另一个图像(在另一个程序中运行)但它仍然不起作用,所以我知道这不是图像的问题。

1 个答案:

答案 0 :(得分:0)

如图所示,图像未正确加载。

java.net.MalformedURLException: no protocol: SuperMario/brick.png 
at java.net.URL.<init>(URL.java:586) 
at java.net.URL.<init>(URL.java:483) 
at java.net.URL.<init>(URL.java:432) 
at RenderMap.main(RenderMap.java:40) 

java.net.MalformedURLException: no protocol: SuperMario/ground.png 
at java.net.URL.<init>(URL.java:586) 
at java.net.URL.<init>(URL.java:483) 
at java.net.URL.<init>(URL.java:432) 
at RenderMap.main(RenderMap.java:51)

由于您传入了无效的网址,因此无法通过网址加载功能进行调用。正确的URL格式应该与您从Web浏览器访问它们的方式类似,例如:http://someplace.com/SuperMarioFolder/brick.png

要加载图像,请只选择一种方法来读取它们。通过:

  1. URL - 删除File块,并通过完整网址访问该文件。

    try {
        URL url = new URL("http://www.proper-url.com/SuperMario/ground.png");
        groundb = ImageIO.read(url);
    } catch (IOException e) { }
    
  2. File - 删除网址栏。这只允许程序访问本地文件。

    try {
        groundb = ImageIO.read(new File("SuperMario/ground.png"));
    } catch (IOException e) {
    }
    
  3. 为了您项目的目的,我相信选项#2就足够了。

    继续前进,您可能希望使用IDE的调试功能逐步完成代码执行。如果您没有使用,可能需要 IntelliJ Eclipse