我是Java的新手,我想在我的applet中添加一个PNG图像。由于某些原因,当我添加此图像时,我收到以下错误:
线程“Image Fetcher 0”中的异常java.lang.OutOfMemoryError:Java堆空间 at java.awt.image.DataBufferInt。(Unknown Source) at java.awt.image.Raster.createPackedRaster(Unknown Source) at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source) at sun.awt.image.ImageRepresentation.createBufferedImage(Unknown Source) at sun.awt.image.ImageRepresentation.setPixels(Unknown Source) at sun.awt.image.ImageDecoder.setPixels(Unknown Source) at sun.awt.image.PNGImageDecoder.sendPixels(Unknown Source) at sun.awt.image.PNGImageDecoder.produceImage(Unknown Source) at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source) 在sun.awt.image.ImageFetcher.fetchloop(未知来源) at sun.awt.image.ImageFetcher.run(Unknown Source)
当我尝试添加jpeg图像时,它可以正常工作。我该如何解决这个问题?
答案 0 :(得分:1)
您的PNG图片有多大?根据您给我的堆栈跟踪判断,当您尝试从加载的映像创建BufferedImage
时,似乎用完了堆空间。您可以尝试将图像调整为较小的尺寸。
您可以先尝试增加堆大小,看看是否能解决问题 - 请参阅applet的java_arguments参数,尽管这不是永久解决方案(没有人喜欢内存占用小程序)。您还应该通过分析器运行应用程序,并查看占用大部分内存的内容。 OutOfMemoryError
可能意味着内存泄漏。它甚至可能在您的图像加载类之外,因为在尝试加载图像时堆可能已经过满,并且图像加载导致它填满。尝试使用visualvm中的探查器,因为它会告诉您最大的消费者。
希望有所帮助:)
-- Flaviu Cipcigan