[ Foro de Java ]

Java heap space

17-Feb-2022 18:47
Invitado (VICTOR)
0 Respuestas

Estoy tratando de cargar una imagen en un programa escrito por mí, el cual he corrido muchas veces cargando y procesando imágenes jpg, png, pdf (una por cada corrida) sin problema, hasta hoy, que me arroja el siguiente mensaje:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.desktop/java.awt.image.DataBufferInt.<init>(DataBufferInt.java:75)
at java.desktop/java.awt.image.Raster.createPackedRaster(Raster.java:539)
at java.desktop/java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1032)
at java.desktop/java.awt.image.BufferedImage.<init>(BufferedImage.java:324)
at matrizbizarra.transformador.pintar(transformador.java:312)
at matrizbizarra.transformador.main(transformador.java:473)
BUILD SUCCESSFUL (total time: 44 minutes 41 seconds)

Aparentemente es por el tamaño de la imagen, aunque es una imagen pequeña de 4428*1109 pixeles y 2,6MB, el código correspondiente es:

JPanel panel2 = new JPanel();
       panel2.setLayout(new BorderLayout());
       JPanel imagenoriginal = new JPanel();
       imagenoriginal.setPreferredSize(new Dimension(15000, 15000));
       setBackground(Color.white);
       //imagenoriginal.add( new JLabel( "imagenoriginal" ) );
       // Cargamos el gráfico, o imagen , en la panatalla
       File img = new File("D:\\Users\\Victor\\Documents\\murales\\ARENA DEL RIO\\piso derecha con autor 2.png");
       try {
           buffer = ImageIO.read(img);
       } catch (IOException ex) {
           throw new RuntimeException("Could not open file: " + img);
           //Logger.getLogger(transformador.class.getName()).log(Level.SEVERE, null, ex);
       }
       if (buffer == null) {
           throw new RuntimeException("Invalid image file: " + img);
       }
       
       ancho = (buffer.getWidth() / resol);
       alto = (buffer.getHeight() / resol);
       System.out.println("anchoimagenorig=" + ancho + "   pixeles =" + (ancho * resol));
       System.out.println("altoimagenorig=" + alto + "   pixeles =" + (alto * resol));
       //resultsSet.close();
       ImageIcon imagenP3 = new ImageIcon(buffer);
       JLabel etiqP3 = new JLabel(imagenP3);
       imagenoriginal.add(etiqP3);
       JScrollPane scrollpane = new JScrollPane(imagenoriginal);
       panel2.add(scrollpane, BorderLayout.CENTER);
       // panel2.add( new JLabel( "bottom panel" ) );
       split.setRightComponent(panel2);
       setVisible(true);
   }

Agradezco a la comunidad la ayuda que puedan ofrecerme para solucionar el problema, ya que soy un aprendiz de programación. Puedo enviar copia de la imagen.

VICTOR viguita1309@gmail.com




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)