我正在用 Java 编写 2D 游戏,但无法将图像加载到图像处理程序中。首先,我想说系统可以正常工作,直到我开始加载超过 15 张图像。
我有一个 AnimationHandler 类,它被赋予了图像的名称和路径,并且应该将它们加载到 Animation 类中并存储这些动画。我这样做是为了让我的游戏中的每个对象实例都可以使用相同的动画,而不是单独加载它们。
无论如何,我的问题是当我尝试加载大量图像时(我将解释为什么我将在一秒钟内拥有这么多图像。)我收到以下错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
我正在加载图像:
BufferedImage im = ImageIO.read(getClass().getResources(imgName));
我将不得不加载这么多图像的原因是因为 a) 每帧一张图像或每个动画至少一张更大的图像。b)一些动画(例如背景)很大,所以我把这些动画的每一帧都分成了几部分。
从我看到的情况来看,任何人似乎得到的唯一响应是增加 JVM 可用的内存量,但我还没有构建 .jar 文件,我正在从 NetBeans 执行并且不知道如何从 NetBeans 内部更改它。
此外,它加载图像的方式是为每个正在加载的图像创建一个新线程。我不知道这是否会有所帮助,但有没有办法跟踪当前正在加载的图像数量,并根据该数字选择等待加载下一张图像?
任何帮助将不胜感激,谢谢彼得
编辑:继承人完整的堆栈跟踪:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:59)
at java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397)
at java.awt.image.Raster.createWritableRaster(Raster.java:938)
at javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1056)
at javax.imageio.ImageReader.getDestination(ImageReader.java:2879)
at com.sun.imageio.plugins.png.PNGImageReader.readImage(PNGImageReader.java:1263)
at com.sun.imageio.plugins.png.PNGImageReader.read(PNGImageReader.java:1560)
at javax.imageio.ImageIO.read(ImageIO.java:1422)
at javax.imageio.ImageIO.read(ImageIO.java:1374)
at Loaders.ImageLoader.loadImage(ImageLoader.java:25)
at MediaHandlers.AnimationHandler.loadAnimation(AnimationHandler.java:53)
at MediaHandlers.AnimationHandler.initAnimations(AnimationHandler.java:38)
at MediaHandlers.AnimationHandler.<init>(AnimationHandler.java:22)
at Main.PlatformGame.<init>(PlatformGame.java:90)
at Main.PlatformGame.main(PlatformGame.java:105)