我们是12年级的ip学生... 我们正面临这个例外,我们不知道如何纠正这个例外。
run:
Exception in thread "Image Fetcher 1" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:41)
at java.awt.image.Raster.createPackedRaster(Raster.java:458)
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1015)
at sun.awt.image.ImageRepresentation.createBufferedImage(ImageRepresentation.java:230)
at sun.awt.image.ImageRepresentation.setPixels(ImageRepresentation.java:484)
at sun.awt.image.ImageDecoder.setPixels(ImageDecoder.java:120)
at sun.awt.image.JPEGImageDecoder.sendPixels(JPEGImageDecoder.java:97)
at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
at sun.awt.image.JPEGImageDecoder.produceImage(JPEGImageDecoder.java:119)
at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:246)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:41)
at java.awt.image.Raster.createPackedRaster(Raster.java:458)
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1015)
at sun.awt.image.SunVolatileImage.getBackupImage(SunVolatileImage.java:225)
at sun.awt.image.VolatileSurfaceManager.getBackupSurface(VolatileSurfaceManager.java:252)
at sun.awt.image.VolatileSurfaceManager.initialize(VolatileSurfaceManager.java:108)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:72)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:82)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:93)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:87)
at sun.awt.windows.WComponentPeer.createVolatileImage(WComponentPeer.java:604)
at java.awt.Component.createVolatileImage(Component.java:3316)
at java.awt.Component$BltBufferStrategy.createBackBuffers(Component.java:4038)
at java.awt.Component$BltBufferStrategy.<init>(Component.java:3983)
at java.awt.Component$BltSubRegionBufferStrategy.<init>(Component.java:4236)
at java.awt.Component.createBufferStrategy(Component.java:3567)
at java.awt.Window.createBufferStrategy(Window.java:3012)
at javax.swing.BufferStrategyPaintManager$BufferInfo.createBufferStrategy(BufferStrategyPaintManager.java:844)
at javax.swing.BufferStrategyPaintManager$BufferInfo.createBufferStrategy(BufferStrategyPaintManager.java:795)
at javax.swing.BufferStrategyPaintManager$BufferInfo.getBufferStrategy(BufferStrategyPaintManager.java:728)
at javax.swing.BufferStrategyPaintManager.prepare(BufferStrategyPaintManager.java:505)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:263)
at javax.swing.RepaintManager.paint(RepaintManager.java:1217)
at javax.swing.JComponent.paint(JComponent.java:1013)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:21)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
at java.awt.Container.paint(Container.java:1780)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:694)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:41)
at java.awt.image.Raster.createPackedRaster(Raster.java:458)
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1015)
at sun.awt.image.SunVolatileImage.getBackupImage(SunVolatileImage.java:225)
at sun.awt.image.VolatileSurfaceManager.getBackupSurface(VolatileSurfaceManager.java:252)
at sun.awt.image.VolatileSurfaceManager.initialize(VolatileSurfaceManager.java:108)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:72)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:82)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:93)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:87)
at sun.awt.windows.WComponentPeer.createVolatileImage(WComponentPeer.java:604)
at java.awt.Component.createVolatileImage(Component.java:3316)
at java.awt.Component$BltBufferStrategy.createBackBuffers(Component.java:4038)
at java.awt.Component$BltBufferStrategy.<init>(Component.java:3983)
at java.awt.Component$BltSubRegionBufferStrategy.<init>(Component.java:4236)
at java.awt.Component.createBufferStrategy(Component.java:3567)
at java.awt.Window.createBufferStrategy(Window.java:3012)
at javax.swing.BufferStrategyPaintManager$BufferInfo.createBufferStrategy(BufferStrategyPaintManager.java:844)
at javax.swing.BufferStrategyPaintManager$BufferInfo.createBufferStrategy(BufferStrategyPaintManager.java:795)
at javax.swing.BufferStrategyPaintManager$BufferInfo.getBufferStrategy(BufferStrategyPaintManager.java:728)
at javax.swing.BufferStrategyPaintManager.prepare(BufferStrategyPaintManager.java:505)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:263)
at javax.swing.RepaintManager.paint(RepaintManager.java:1217)
at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:803)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:694)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:41)
at java.awt.image.Raster.createPackedRaster(Raster.java:458)
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1015)
at sun.awt.image.SunVolatileImage.getBackupImage(SunVolatileImage.java:225)
at sun.awt.image.VolatileSurfaceManager.getBackupSurface(VolatileSurfaceManager.java:252)
at sun.awt.image.VolatileSurfaceManager.initialize(VolatileSurfaceManager.java:108)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:72)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:82)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:93)
at sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:87)
at sun.awt.windows.WComponentPeer.createVolatileImage(WComponentPeer.java:604)
at java.awt.Component.createVolatileImage(Component.java:3316)
at java.awt.Component$BltBufferStrategy.createBackBuffers(Component.java:4038)
at java.awt.Component$BltBufferStrategy.<init>(Component.java:3983)
at java.awt.Component$BltSubRegionBufferStrategy.<init>(Component.java:4236)
at java.awt.Component.createBufferStrategy(Component.java:3567)
at java.awt.Window.createBufferStrategy(Window.java:3012)
at javax.swing.BufferStrategyPaintManager$BufferInfo.createBufferStrategy(BufferStrategyPaintManager.java:844)
at javax.swing.BufferStrategyPaintManager$BufferInfo.createBufferStrategy(BufferStrategyPaintManager.java:795)
at javax.swing.BufferStrategyPaintManager$BufferInfo.getBufferStrategy(BufferStrategyPaintManager.java:728)
at javax.swing.BufferStrategyPaintManager.prepare(BufferStrategyPaintManager.java:505)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:263)
at javax.swing.RepaintManager.paint(RepaintManager.java:1217)
at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:803)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:694)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
BUILD SUCCESSFUL (total time: 25 seconds)
答案 0 :(得分:8)
增加堆空间。如果未指定更高的最大值,Java将使用64MByte堆内存。像这样开始你的应用程序:
java -Xmx128m MyClass
有128MByte。
看起来你在ant build中启动应用程序。我会分开建筑和执行。让ant创建一个批处理文件,用于启动应用程序。
现在您可能需要为ant本身增加堆空间。这是通过环境变量(为windows显示的解决方案)完成的:
set ANT_OPTS=-Xms512m -Xmx512m
进一步阅读
答案 1 :(得分:2)
您可以使用以下选项设置堆大小:
-Xms32m -Xmx128m
在此处查看VM选项:
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
但我会建议你检查消耗堆积的东西。您可以使用以下分析工具来执行此操作:
答案 2 :(得分:1)
其他答案并非完整而完整的答案。它们只是乐队助手。根本原因是因为您正在创建一个ImageIcon对象,该对象在后台创建这些线程。由于JPG腐败,我也遇到了这个问题。如果将内存大小增加到1 TB并不重要,如果用户上传损坏的图像,则可能会将所有内容都降低。相反,使用ImageIO并捕获创建周围的内存不足错误:
try { // catch OutOfMemoryError for corrupt JPG
BufferedImage inImage = ImageIO.read(new File(jpgAbsPath));
} catch (OutOfMemoryError oome) {
logger.log(Level.SEVERE, "Out of memory error when trying to read image " + jpgAbsPath +" .", oome);
return;
}
请点击此处了解详情:http://www.coderanch.com/t/376018/java/java/Image-Fetcher-Threads http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html
答案 3 :(得分:0)
您的JVM的堆空间不足。尝试使用-Xmx
切换到JVM以增加程序可用的堆空间量。
java -Xmx256m YourClassName
答案 4 :(得分:0)
默认情况下,如果没有modifiyin JVM start params,则会有128m的堆空间。
程序分配的内存大于128米。
您可以增加堆空间限制:
java -Xms<initial heap size> -Xmx<maximum heap size>