Exception java.lang.reflect.InvocationTargetException RenderedImage

Exception java.lang.reflect.InvocationTargetException RenderedImage - Java - Programmation

Marsh Posté le 17-09-2007 à 17:12:35    

Bonjour, voilà j'ai une exception "java.lang.reflect.InvocationTargetException" que je n'arrive pas à catcher.
Cette exception intervient lors de l'appel de la methode getWidth() d'une RenderedImage. Elle vient du fait que mon image est trop grande en taille et entraine un OutOfMemory dans la methode getwidth(). Voici un extrait de mon code :
 
 
 String extOut;
     if (ext.toUpperCase().equals("JPEG" ) || ext.toUpperCase().equals("JPG" ))
             extOut="JPEG";
            else
             if (ext.toUpperCase().equals("TIFF" ) || ext.toUpperCase().equals("TIF" ))
              extOut="TIFF";
             else
              if (ext.toUpperCase().equals("GIF" ))
               extOut="GIF";
              else
               if (ext.toUpperCase().equals("PNG" ))
                extOut="PNG";
               else
         extOut="unknow";  
     
     FileSeekableStream s = new FileSeekableStream(cheminFichierEntree);
     
      // Create the ParameterBlock and add the SeekableStream to it.
                  ParameterBlock pb = new ParameterBlock();
                  pb.add(s);
      RenderedOp img;
           
      if (extOut.equals("unknow" ))  
       img = JAI.create("FileLoad",cheminFichierEntree);
      else
       img = JAI.create(extOut, pb);
     
       
       
   //Calcul du ratio pour le redimensionnement des images
   double ratio;
   ratio = (double) larg / (double) img.getWidth();
 
J'ai donc un exception :  
 
Error: One factory fails for the operation "JPEG"
Occurs in: javax.media.jai.ThreadSafeOperationRegistry
java.lang.reflect.InvocationTargetException
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:85)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:58)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
 at java.lang.reflect.Method.invoke(Method.java:391)
 at javax.media.jai.FactoryCache.invoke(FactoryCache.java:122)
 at javax.media.jai.OperationRegistry.invokeFactory(OperationRegistry.java:1674)
 at javax.media.jai.ThreadSafeOperationRegistry.invokeFactory(ThreadSafeOperationRegistry.java:473)
 at javax.media.jai.registry.RIFRegistry.create(RIFRegistry.java:332)
 at javax.media.jai.RenderedOp.createInstance(RenderedOp.java:819)
 at javax.media.jai.RenderedOp.createRendering(RenderedOp.java:867)
 at javax.media.jai.RenderedOp.getWidth(RenderedOp.java:2179)
 at MiniatureImage.creerMiniature(MiniatureImage.java:76)
 at JavaAgent.NotesMain(JavaAgent.java:62)
 at lotus.domino.AgentBase.runNotes(Unknown Source)
 at lotus.domino.NotesThread.run(Unknown Source)
Caused by: java.lang.OutOfMemoryError:  
 at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:70)
 at java.awt.image.Raster.createPackedRaster(Raster.java:492)
 at sun.awt.image.codec.JPEGImageDecoderImpl.allocateDataBuffer(JPEGImageDecoderImpl.java:364)
 at sun.awt.image.codec.JPEGImageDecoderImpl.readJPEGStream(Native Method)
 at sun.awt.image.codec.JPEGImageDecoderImpl.decodeAsBufferedImage(JPEGImageDecoderImpl.java:243)
 at com.sun.media.jai.codecimpl.JPEGImage.<init>(JPEGImageDecoder.java:110)
 at com.sun.media.jai.codecimpl.JPEGImageDecoder.decodeAsRenderedImage(JPEGImageDecoder.java:46)
 at com.sun.media.jai.opimage.CodecRIFUtil.create(CodecRIFUtil.java:112)
 at com.sun.media.jai.opimage.JPEGRIF.create(JPEGRIF.java:43)
 ... 16 more
 
Je ne peux pas faire un catch de l'exception java.lang.reflect.InvocationTargetException car elle intervient dans la méthode getWidth(). Quelqu'un sait-il comment je pourrais m'en sortir ?


Message édité par Eyban le 17-09-2007 à 17:14:37
Reply

Marsh Posté le 17-09-2007 à 17:12:35   

Reply

Marsh Posté le 18-09-2007 à 09:12:23    

Citation :

Caused by: java.lang.OutOfMemoryError:


 
C'est plutot là que se situe ton problème.
 
Voila un petit lien pour t'aider à chercher/éliminer ton problème de mémoire

Message cité 1 fois
Message édité par Bidem le 18-09-2007 à 09:12:59
Reply

Marsh Posté le 18-09-2007 à 10:18:03    

Bidem a écrit :

Citation :

Caused by: java.lang.OutOfMemoryError:


 
C'est plutot là que se situe ton problème.
 
Voila un petit lien pour t'aider à chercher/éliminer ton problème de mémoire


 
Merci de ta réponse.J'ai résolu le pb en augmentant la mémoire max de la machine virtuelle. Ton lien parlait peut être de ça (je ne le vois pas). Par contre j'aurais quand même voulu savoir (pour mon info personnel et au cas où il y ai encore un pb de out of memory) s'il était possible d'une façon ou d'un autre de catcher cette exception qui arrive dans la methode getwidth.

Reply

Marsh Posté le 18-09-2007 à 11:02:11    

Oui, on peut la catcher mais en fait, ce n'est pas une Exception, c'est une java.lang.Error.
 
Comme les Exception, les Error étendent Throwable mais sont utilisées pour des erreurs graves.
 
Ainsi que l'explique la javadoc, elles ne devraient pas être catchées.


Message édité par Bidem le 18-09-2007 à 11:02:37
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed