Intanto ti ringrazio per avermi risposto così velocemente!!!
Ho provato il tuo codice aggiungendo una foto di prova così:
codice:
public static void main(String[] args) {
Iterator<ImageReader> readerItr = ImageIO.getImageReadersByFormatName("jpg");
while (readerItr.hasNext()) {
ImageReader reader = readerItr.next();
ImageReaderSpi readerSpi = reader.getOriginatingProvider();
ImageInputStream iis;
try {
iis = ImageIO.createImageInputStream(new File( "C:\\Users\\Utente\\Desktop\\foto_prova.JPG") );
reader.setInput(iis);
System.out.format("%s, %s:\nsupport thumbnails: %s \nnumThumb : %s",
readerSpi.getVendorName(), readerSpi.getVersion(),
reader.readerSupportsThumbnails(), reader.getNumThumbnails(0));
} catch (IOException e) {e.printStackTrace();}
}
}
Il risultato è questo:
codice:
Oracle Corporation, 0.5:
support thumbnails: true
numThumb : 0
Inizio a perdere le speranze...le ho provate tutte
P.S.: una cosa posso notarla subito dal tuo codice: model è un DefaultListModel che viene ricevuto dal costruttore. Da qualche parte nella tua applicazione è sicuramente assegnato ad un JList.
Nel doInBackground fai un model.set( .... ). Attenzione!! doInBackground non "gira" nel Event Dispatch Thread e siccome Swing non è thread-safe (e nemmeno i model lo sono di per sé), allora il tuo set è inappropriato lì in quel punto.
Intendi che devo aggiungere una cosa di questo tipo nella Swing Worker?
codice:
@Override
protected void done() {
model.set(indexModel, tubInfo);
}
Cmq per intenderci io richiamo la swing worker in questo modo:
codice:
private void setListFiles(final File[] files,final int dimensioneIcone) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
clearList();
ImageThubInfo tubInfo=null;
for(File file:files){
tubInfo = new ImageThubInfo(file.getAbsolutePath(), file.getName(),0,0,0,getIconImage(file,dimensioneIcone) ); ///file.length al posto del 3° zero
tubInfo.setImageSize(dimensioneIcone);
model.addElement(tubInfo);
list.revalidate();
}
caricaIcone();
}
});
}
private void caricaIcone(){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
ImageThubInfo tubInfo=null;
int inizio=list.getFirstVisibleIndex();
if(inizio!=-1){
int fine = list.getLastVisibleIndex();
for(int i=inizio;i<=fine;i++){
tubInfo= model.get(i);
if( isAJpegFile(tubInfo.getPath()) ){
SwingWorker<Void, Void> worker=new ThumbLoader(model,i,tubInfo);
threadPool.execute(worker);
}
}
list.repaint();
}
}
});
}
Googolando un po' ho trovato questo :
http://libexif.cvs.sourceforge.net/v....1&view=markup
L'ho fatto provare ad un mio amico e funziona (con la stessa foto poi che ho utilizzato io nel primo codice che ho postato dove il mio reader dice che non sono presenti thumb)..
Sarebbe possibile quindi invocare da java un file C e farmi rimandare una BufferdImage col la thumb??
Cioè, so che è possibile ma non ho capito bene come si fa.
Grazie ancora per l'aiuto