Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - problema con classe ImageIO
Forum - Java - problema con classe ImageIO

Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 16:57
Giovedė, 19/08/2010
Salve a tutti, sto sviluppando una semplice applicazione che mi permette di visualizzare delle immagini.
Ho esteso la classe JPanel e ridefinito il metodo paintComponent per visualizzare le immagini, fin qui tt ok!
Quando l'utente preme il tasto "apri" invoco un metodo che mi restituisce un array di BufferedImage[] ; all'interno del metodo appare una JFileChooser per selezionare i file
Codice sorgente - presumibilmente Java

  1. public BufferedImage[] readImage(){
  2.  
  3.         JFileChooser dlgFile = new JFileChooser();
  4.         FileNameExtensionFilter filter = new FileNameExtensionFilter("All Files","jpg","JPEG","GIF");
  5.         dlgFile.setFileFilter(filter);
  6.         dlgFile.setMultiSelectionEnabled(true);
  7.         //dlgFile.setDragEnabled(true);
  8.         BufferedImage bimg = null;
  9.  
  10.         if(dlgFile.showOpenDialog(null)==JFileChooser.APPROVE_OPTION){
  11.             try {
  12.                 File[] file = dlgFile.getSelectedFiles();
  13.                 bimg = new BufferedImage[file.length];
  14.  
  15.                   for(int i = 0;i < file.length; i++){
  16.                      bimg[i] = ImageIO.read(file[i]);
  17.                   }              
  18.             } catch (Exception ex) {
  19.                
  20.                System.out.println(ex.getMessage());
  21.             }
  22.         }
  23.         return bimg;
  24.     }


Questo funziona solo con meno di 15 immagini selezionate
da come eccezione "java.lang.OutOfMemoryError: Java heap space"

Poi ho provato con un ArrayList() perchč prob č un problema di memoria, ma non itera pių di 15 elementi.
Codice sorgente - presumibilmente Java

  1. public List<BufferedImage> readImage(){
  2.  
  3.         JFileChooser dlgFile = new JFileChooser();
  4.         FileNameExtensionFilter filter = new FileNameExtensionFilter("All Files","jpg","JPEG","GIF");
  5.         dlgFile.setFileFilter(filter);
  6.         dlgFile.setMultiSelectionEnabled(true);
  7.         //dlgFile.setDragEnabled(true);
  8.      
  9.         List<BufferedImage> listmg = new ArrayList<BufferedImage>();
  10.      
  11.  
  12.         if(dlgFile.showOpenDialog(null)==JFileChooser.APPROVE_OPTION){
  13.             try {
  14.                 File[] file = dlgFile.getSelectedFiles();
  15.  
  16.                  for(File x : file){
  17.  
  18.                         listmg.add(ImageIO.read(x));
  19.                    }
  20.                                        
  21.             } catch (Exception ex) {
  22.                
  23.                System.out.println(ex.getMessage());
  24.             }
  25.         }
  26.         return listmg;
  27.     }


Forse č meglio se al pannello passo solo la var di tipo File e li carico l'immagine con ImageIO(File name);

Non riesco a capire il motivo di questa eccezione.

PM
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Up
0
Down
V
Segnala al moderatore
Postato alle 23:10
Giovedė, 19/08/2010
Puoi aumentare le dimensioni dello heap virtuale di java passando alla jvm questi parametri:


java -Xmx256m Classe

Ovviamente al posto di 256 puoi mettere anche di meno o di pių, ho visto usare da un minimo di 32 a un massimo di 1024, ma dovresti controllare sulla documentazione java per trovare tutti i parametri.

Ultima modifica effettuata da netarrow il 20/08/2010 alle 18:29
PM
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 10:02
Venerdė, 20/08/2010
Grazie netarrow!

PM