Exception java.lang.reflect.InvocationTargetException RenderedImage - Java - Programmation
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
Marsh Posté le 18-09-2007 à 10:18:03
Bidem a écrit :
|
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.
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.
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