Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 图形绘制图像渲染奇怪的方块_Java_Awt_2d - Fatal编程技术网

Java 图形绘制图像渲染奇怪的方块

Java 图形绘制图像渲染奇怪的方块,java,awt,2d,Java,Awt,2d,所以我在用Java制作自己的游戏,是的,很奇怪。问题是,我提出了一种方法,返回一个加载了图像的BuffereImage: public static BufferedImage getImage(String img) { try { image = ImageIO.read(Game.class.getResourceAsStream("./img/" + img)); } catch (IOException e) { e.printS

所以我在用Java制作自己的游戏,是的,很奇怪。问题是,我提出了一种方法,返回一个加载了图像的BuffereImage:

    public static BufferedImage getImage(String img) {
    try {
        image = ImageIO.read(Game.class.getResourceAsStream("./img/" + img));
    } catch (IOException e) {
        e.printStackTrace();
    }
    image.flush();
    return image;

}
此方法返回“我的图标”的图像,没有问题

        frame.setIconImage(Game.getImage("icon.png"));
问题是当我在画布上绘制图像时:

            g.drawImage(Game.getImage("aa.png"), 0, 0,Game.WIDTH, Game.HEIGHT,null);
显示以下内容:

实际图像是:

有人能帮我吗


我应该说它可以在Windows上运行,但不能在GNU/Linux上运行。拍摄您的图像,并将其放在这个类下面的子目录/包中(在
img
包中),这对我来说很好

我注意到了什么
aa
在我下载时是一个
jpg
,但在您的代码中被命名为
png
,可能不是问题,但是不同的


如果没有a,几乎不可能知道还有什么建议

我最终发现这是一个硬件问题。我回到家,在同一硬盘上的VM+上测试了它。它工作正常,很抱歉占用您的时间回答。

可能不想从
“刷新此图像对象正在使用的所有可重构资源。这包括缓存以渲染到屏幕的任何像素数据,以及用于存储图像数据或像素(如果可以重新创建)的任何系统资源“
这并不是说flush方法仍然不起作用。另外,
getImage
方法似乎在实例字段中缓存对图像的引用-您不应该这样做,您应该只返回结果图像-并且可能引发异常,因为它不是真正的方法来处理固定的责任,我仍然有相同的错误。我真的不知道该怎么办,应该说它可以在Windows上运行,但不能在Linux上运行OpenGL你可以在那里查看源代码,有点混乱它在MacOSSo上运行良好。。。问题在于linux。。。我不知道这是否是我的发行版,我会稍后在虚拟机中试用,如果有效,我会更新。事实上,这可能与你如何管理缓冲策略有关
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new MenuPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public static class Game {
        public static BufferedImage getImage(String named) throws IOException {
            return ImageIO.read(Game.class.getResource("img/" + named));
        }
    }

    public class MenuPane extends JPanel {

        private BufferedImage background;

        public MenuPane() {
            try {
                background = Game.getImage("aa.jpg");
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

        @Override
        public Dimension getPreferredSize() {
            return background == null ? new Dimension(200, 200) : new Dimension(background.getWidth(), background.getHeight());
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(background, 0, 0, this);
        }

    }

}