Oppure

Loading
19/08/10 14:57
Bonny
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
    public BufferedImage[] readImage(){

        JFileChooser dlgFile = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("All Files","jpg","JPEG","GIF");
        dlgFile.setFileFilter(filter);
        dlgFile.setMultiSelectionEnabled(true);
        //dlgFile.setDragEnabled(true);
        BufferedImage bimg = null;

        if(dlgFile.showOpenDialog(null)==JFileChooser.APPROVE_OPTION){
            try {
                File[] file = dlgFile.getSelectedFiles();
                bimg = new BufferedImage[file.length];

                  for(int i = 0;i < file.length; i++){
                     bimg[i] = ImageIO.read(file[i]);
                  }               
            } catch (Exception ex) {
                
               System.out.println(ex.getMessage());
            }
        }
        return bimg;
    }

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.
    public List<BufferedImage> readImage(){

        JFileChooser dlgFile = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("All Files","jpg","JPEG","GIF");
        dlgFile.setFileFilter(filter);
        dlgFile.setMultiSelectionEnabled(true);
        //dlgFile.setDragEnabled(true);
      
        List<BufferedImage> listmg = new ArrayList<BufferedImage>();
     

        if(dlgFile.showOpenDialog(null)==JFileChooser.APPROVE_OPTION){
            try {
                File[] file = dlgFile.getSelectedFiles();

                 for(File x : file){

                        listmg.add(ImageIO.read(x));
                   }
                                       
            } catch (Exception ex) {
                
               System.out.println(ex.getMessage());
            }
        }
        return listmg;
    }

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.
aaa
19/08/10 21:10
netarrow
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 20/08/10 16:29
aaa
20/08/10 8:02
Bonny
Grazie netarrow!
aaa