Trocar imagens ImagemIcon

Galera, estou com um problema no meu codigo.
Consigo de trocar imagem apenas uma vez.
Quando vou adicionar a terceira imagem o programa nem abre.
Dá exception.

Erro:Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferByte.(Unknown Source)
at java.awt.image.ComponentSampleModel.createDataBuffer(Unknown Source)
at java.awt.image.Raster.createWritableRaster(Unknown Source)
at javax.imageio.ImageTypeSpecifier.createBufferedImage(Unknown Source)
at javax.imageio.ImageReader.getDestination(Unknown Source)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(Unknown Source)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(Unknown Source)
at javax.imageio.ImageIO.read(Unknown Source)
at javax.imageio.ImageIO.read(Unknown Source)
at EscalonandoImagem.imagemEscalonada(EscalonandoImagem.java:79)
at EscalonandoImagem.(EscalonandoImagem.java:37)
at ImageIcon.main(ImageIcon.java:8)

Codigo

[code]import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class EscalonandoImagem extends JFrame{

   private JButton btn;   
   private JLabel lblImg;   
   private ImageIcon imgIcon [] = new ImageIcon[200]; 
   private int x = 0;
  
   public EscalonandoImagem() {
	   
      super("teste de escalonamento de imagem");   
      setLayout(null);   
      setSize(300, 300);   
      setDefaultCloseOperation(EXIT_ON_CLOSE);  

imgIcon[0] = imagemEscalonada(“img/ECONOMIA001.jpg”, 50, 50);
imgIcon[1] = imagemEscalonada(“img/ECONOMIA002.jpg”, 50, 50);
imgIcon[2] = imagemEscalonada(“img/ECONOMIA003.jpg”, 50, 50);

btn = new JButton(“trocar”);
btn.setBounds(1, 1, 80, 40);
add(btn);
lblImg = new JLabel(imgIcon[0]);
lblImg.setBounds(10, 100, imgIcon[0].getIconWidth(), imgIcon[0].getIconHeight());
add(lblImg);

      btn.addActionListener(new ActionListener() {   
  
         @Override  
         public void actionPerformed(ActionEvent arg0) {   
  
        	 lblImg.setIcon(imgIcon[x+1]);  
             x++;

repaint();
System.out.println(lblImg.getIcon());
}

      });   
  
   }   

public ImageIcon imagemEscalonada(String url, int altura, int largura) {
BufferedImage bufferedImage = null;
try {
bufferedImage = ImageIO.read(new File(url));
} catch (IOException e) {
System.out.println(“Erro ao abrir a imagem…”);
e.fillInStackTrace();
}

      return new ImageIcon(bufferedImage.getScaledInstance(altura, largura,   
            1000));   
   }   

[/code]

main

[code]import javax.swing.JFrame;

public class ImageIcon {

public static void main(String[] args) {
	
	EscalonandoImagem escalonando = new EscalonandoImagem();
	escalonando.setVisible(true);
	escalonando.setExtendedState(JFrame.MAXIMIZED_BOTH);
}

}[/code]

Com duas imagens meu código funciona normal.
Mas com 3 imagens nem abre o programa.
Alguém sabe por que?

Obrigado

Está dando erro de falta de memória.

Qual é o tamanho da imagem após o redimensionamento?
Que tamanho de heap você está usando para sua aplicação?

ViniGodoy, o que é heap?

Eu testei com imagens menores e funcionou.
É isso mesmo.
Porém, eu preciso usar imagens de 800 kb.
Não posso alterá-las.
Não teria como eu diminuir o tamanho da imagem no código?

Valeu

Pq vc multiplica o tamanho das imagens por 1000? É isso que aquele “getScaledInstance” faz.

Se vc pode diminuir o tamanho da imagem, então, basta reduzir aquele multiplicador.

O heap é o tamanho da área de memória que o Java tem para alocar seus objetos. Por padrão, o Java ocupa no máximo 64mb. Você pode aumentar esse limite através de parâmetros na inicialização da sua JVM. Com isso, vc poderia reservar mais memória para aplicação e, eventualmente, seria possível mostrar essas imagens.