Application Swing -> ImageIO

Résolu/Fermé
morakevi Messages postés 15 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 2 mai 2016 - 30 avril 2016 à 21:13
morakevi Messages postés 15 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 2 mai 2016 - 2 mai 2016 à 14:45
Bonjour à tous,

j'ai développer une petite application Swing qui permet de transformer des fichier DICOM en image JPEG. Cette application fonctionne très bien quand je suis dans mon IDE. j'ai généré un jar de cette application et là ça ne fonctionne plus.

En regardant un peu de plus près, j'ai remarquer qu'il "bloquait" sur la ligne
Iterator iterator = ImageIO.getImageReadersByFormatName("DICOM");


Voici la classe entière :

public static DicomInfo extractDicomData(File file, File tempDirectory) {
LogFile.getInstance().log("info", "start extractDicomData method");
DicomInfo dicomInfo = new DicomInfo();
try {
BufferedImage image = null;
LogFile.getInstance().log("info", "BufferedImage image = null;");
ImageIO.scanForPlugins();
LogFile.getInstance().log("info", " ImageIO.scanForPlugins();");
Iterator iterator = ImageIO.getImageReadersByFormatName("DICOM");
LogFile.getInstance().log("info", "ImageIO.getImageReadersByFormatName(\"DICOM\");");
ImageReader reader = (ImageReader) iterator.next();
DicomImageReadParam param = (DicomImageReadParam) reader.getDefaultReadParam();
LogFile.getInstance().log("info", " DicomImageReadParam param = (DicomImageReadParam) reader.getDefaultReadParam();");
ImageInputStream iis = ImageIO.createImageInputStream(file);
reader.setInput(iis, false);
LogFile.getInstance().log("info", "reader.setInput(iis, false);");
image = reader.read(0, param);
iis.close();

if (image == null) {
LogFile.getInstance().log("error", "couln't read dicom image!");
return null;
}

File jpegFile = File.createTempFile("dicom", ".jpg", tempDirectory);
LogFile.getInstance().log("info", "Temp file : " + jpegFile.getAbsolutePath());
OutputStream output = new BufferedOutputStream(new FileOutputStream(jpegFile));

ImageWriter writer = null;
Iterator iter = ImageIO.getImageWritersByFormatName("jpg");
writer = (ImageWriter) iter.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(output);
writer.setOutput(ios);
ImageWriteParam iwparam = new JPEGImageWriteParam(Locale.getDefault());
iwparam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwparam.setCompressionQuality(Float.parseFloat(PropertiesCache.getInstance().getProperty("CompressionQuality")));
writer.write(null, new IIOImage(image, null, null), iwparam);
ios.flush();
writer.dispose();
ios.close();
output.close();
dicomInfo.setImage(jpegFile);
dicomInfo.setSourcePath(file);
} catch (Exception ex) {
LogFile.getInstance().log("error", "No image available in this dicom file " + file.getName());
LogFile.getInstance().log("Exception", ex.getMessage());
return null;
}

try {
DicomInputStream dicomInputStream = new DicomInputStream(file);
DicomObject object = dicomInputStream.readDicomObject();
dicomInfo.setStudyDate((Date) getMetaData(object, "Study Date", Types.DATE));
dicomInfo.setStudyDescription((String) getMetaData(object, "Study Description", Types.VARCHAR));
dicomInfo.setPatientName((String) getMetaData(object, "Patient’s Name", Types.VARCHAR));
dicomInfo.setPatientId((Long) getMetaData(object, "Patient ID", Types.BIGINT));
dicomInfo.setPatientBirthdate((Date) getMetaData(object, "Patient’s Birth Date", Types.DATE));
dicomInfo.setPatientSex((String) getMetaData(object, "Patient’s Sex", Types.VARCHAR));
} catch (IOException ex) {
LogFile.getInstance().log("error", "unable to get METADATA");
LogFile.getInstance().log("Exception", ex.getMessage());
}

return dicomInfo;
}


Comme vous pouvez le voir, j'ai ajouter des logs pour voir jusqu’où il va et c'est là que j'ai vu que dès que j'utilise ImageIO, il ne va pas plus loin.

est-ce que quelqu'un a une idée de l'origine du problème ? car ça fait des heures que je suis dessus sans succès.

Merci d'avance pour vos réponses

5 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
30 avril 2016 à 21:44
Bonjour,

Quand tu dis que ça "bloque" ça veux dire que tu as une exception ?
Si oui laquelle ?

Ou est-ce que ça veut dire que ça mets un temps "infini" ?
Dans ce cas, quand tu es bloqué est-ce que tu peux faire ces deux commandes (dans une console) et coller le résultat ?

1)
jps

Doit renvoyer la liste des processus Java en cours d'exécution.

2)
jstack 12345

Renvoie l'état du processus 12345 (à remplacer par le numéro obtenu de processus identifié grâce au jps)

Remarque : que ce soit pour l'exception ou la commande jstack merci de nous indiquer à quelles lignes de code correspond chaque numéro de ligne indiqué par le résultat.
0
morakevi Messages postés 15 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 2 mai 2016 8
30 avril 2016 à 21:54
Je n'ai aucune exception, il ne passe pas la ligne

Iterator iterator = ImageIO.getImageReadersByFormatName("DICOM");


étant donné que dans mon fichier de log, je ne vois pas la ligne suivante

LogFile.getInstance().log("info", "ImageIO.getImageReadersByFormatName(\"DICOM\");");


J'ai tester en mettant une autre ligne comme par exemple

ImageIO.scanForPlugins();

et ça ne passe pas non plus.

Ce code est exécuter dans un SwingWorker qui boucle sur la liste des documents fourni et pour chaque document fait la conversion.

Ce que j'ai actuellement, il commence sur le premier document, ensuite quand il arrive à la ligne

LogFile.getInstance().log("info", "ImageIO.getImageReadersByFormatName(\"DICOM\");");

il passe directement dans la methode done du SwingWorker mais na donc rien fait.

Voici ce que j'ai dans mon log

[Fri Apr 29 09:49:41 CEST 2016]info > Initialization of the application DONE
[Fri Apr 29 09:49:41 CEST 2016]info > clean temp directory C:\Users\MORAYKE\AppData\Local\Temp\DICOM_IMG DONE
[Fri Apr 29 09:49:43 CEST 2016]info > Ouvrir explorateur windows pour choisir un CD/DVD
[Fri Apr 29 09:49:57 CEST 2016]info > Load all file of the folder O:\Medome\PACS\Samples\85509\4299569\DICOM
[Fri Apr 29 09:50:00 CEST 2016]info > Number of file found : 333
[Fri Apr 29 09:50:00 CEST 2016]info > file found : O:\Medome\PACS\Samples\85509\4299569\DICOM\1.2.124.113532.172.22.10.141.20140930.130719.362758139.dcm
[Fri Apr 29 09:50:00 CEST 2016]info > start extractDicomData method
[Fri Apr 29 09:50:00 CEST 2016]info > BufferedImage image = null;
[Fri Apr 29 09:50:00 CEST 2016]info > upload process DONE
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
30 avril 2016 à 22:19
Pour t'aider merci de faire les commandes que je t'ai donné au moment où l'application bloque.
0
morakevi Messages postés 15 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 2 mai 2016 8
2 mai 2016 à 07:55
Donc voici le résultat de jps

6224 dicomUploadOld.jar
4908
6004 Jps


et voici le résultat de jstack

2016-05-02 07:52:08
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.77-b03 mixed mode):

"SwingWorker-pool-2-thread-1" #35 daemon prio=5 os_prio=0 tid=0x000000005e2c7000 nid=0x1bb8 waiting on condition [0x000000005f40e000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000d693cc58> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

"Swing-Shell" #22 daemon prio=6 os_prio=0 tid=0x0000000059e8b800 nid=0x1acc waiting on condition [0x000000005dafe000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000d7d90188> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at sun.awt.shell.Win32ShellFolderManager2$ComInvoker$3.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

"TimerQueue" #18 daemon prio=5 os_prio=0 tid=0x000000005a7bf000 nid=0x19a0 waiting on condition [0x000000005d5bf000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000d7d80a50> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.DelayQueue.take(Unknown Source)
at javax.swing.TimerQueue.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

"DestroyJavaVM" #15 prio=5 os_prio=0 tid=0x000000000030d800 nid=0x183c waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"AWT-EventQueue-0" #14 prio=6 os_prio=0 tid=0x000000005a66b800 nid=0x19c4 waiting on condition [0x000000005b65e000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000d7e5e080> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.awt.EventQueue.getNextEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

"AWT-Windows" #12 daemon prio=6 os_prio=0 tid=0x000000005a610800 nid=0x19f8 runnable [0x000000005b37f000]
java.lang.Thread.State: RUNNABLE
at sun.awt.windows.WToolkit.eventLoop(Native Method)
at sun.awt.windows.WToolkit.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

"AWT-Shutdown" #11 prio=5 os_prio=0 tid=0x000000005a60f800 nid=0x1a14 in Object.wait() [0x000000005b0de000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000d7d80dc0> (a java.lang.Object)
at java.lang.Object.wait(Unknown Source)
at sun.awt.AWTAutoShutdown.run(Unknown Source)
- locked <0x00000000d7d80dc0> (a java.lang.Object)
at java.lang.Thread.run(Unknown Source)

"Java2D Disposer" #10 daemon prio=10 os_prio=2 tid=0x000000005a60d800 nid=0x1a10 in Object.wait() [0x000000005af1f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000d7d80f70> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x00000000d7d80f70> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at sun.java2d.Disposer.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

"Service Thread" #9 daemon prio=9 os_prio=0 tid=0x0000000059cc4800 nid=0x1a00 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"C1 CompilerThread2" #8 daemon prio=9 os_prio=2 tid=0x0000000059c70800 nid=0x1848 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" #7 daemon prio=9 os_prio=2 tid=0x0000000057819800 nid=0x1a08 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" #6 daemon prio=9 os_prio=2 tid=0x0000000057817800 nid=0x1214 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Attach Listener" #5 daemon prio=5 os_prio=2 tid=0x0000000057814800 nid=0x44c waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x0000000057810000 nid=0x678 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE

"Finalizer" #3 daemon prio=8 os_prio=1 tid=0x00000000577fe000 nid=0x115c in Object.wait() [0x00000000596bf000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000d7e375c0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x00000000d7e375c0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

"Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x00000000577b5000 nid=0x418 in Object.wait() [0x00000000593de000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000d7e377d8> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Unknown Source)
at java.lang.ref.Reference.tryHandlePending(Unknown Source)
- locked <0x00000000d7e377d8> (a java.lang.ref.Reference$Lock)
at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)

"VM Thread" os_prio=2 tid=0x00000000577aa000 nid=0x19ec runnable

"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x000000000231c000 nid=0x192c runnable

"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x000000000231d800 nid=0x197c runnable

"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x000000000231f000 nid=0x1950 runnable

"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x0000000002322800 nid=0xae0 runnable

"VM Periodic Task Thread" os_prio=2 tid=0x0000000059ce9800 nid=0x1a04 waiting on condition

JNI global references: 630
0
morakevi Messages postés 15 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 2 mai 2016 8
2 mai 2016 à 08:18
Après avoir un peu chipoter dans mon code j'ai enfin réussi a capté une exception. La voici

Exception in thread "AWT-EventQueue-0" java.util.ServiceConfigurationError: javax.imageio.spi.ImageReaderSpi: Provider com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReaderSpi could not be instantiated
at java.util.ServiceLoader.fail(Unknown Source)
at java.util.ServiceLoader.access$100(Unknown Source)
at java.util.ServiceLoader$LazyIterator.nextService(Unknown Source)
at java.util.ServiceLoader$LazyIterator.next(Unknown Source)
at java.util.ServiceLoader$1.next(Unknown Source)
at javax.imageio.spi.IIORegistry.registerApplicationClasspathSpis(Unknown Source)
at javax.imageio.spi.IIORegistry.<init>(Unknown Source)
at javax.imageio.spi.IIORegistry.getDefaultInstance(Unknown Source)
at javax.imageio.ImageIO.<clinit>(Unknown Source)
at be.fmpfbz.dicomupload.client.tools.DicomTools.extractDicomData(DicomTools.java:64)
at be.fmpfbz.dicomupload.client.tools.DicomTools.loadDicomData(DicomTools.java:186)
at be.fmpfbz.dicomupload.client.DicomUpload.OpenMenuActionPerformed(DicomUpload.java:214)
at be.fmpfbz.dicomupload.client.DicomUpload.access$100(DicomUpload.java:27)
at be.fmpfbz.dicomupload.client.DicomUpload$2.actionPerformed(DicomUpload.java:140)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: vendorName == null!
at javax.imageio.spi.IIOServiceProvider.<init>(Unknown Source)
at javax.imageio.spi.ImageReaderWriterSpi.<init>(Unknown Source)
at javax.imageio.spi.ImageReaderSpi.<init>(Unknown Source)
at com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReaderSpi.<init>(CLibJPEGImageReaderSpi.java:80)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
... 50 more
0
morakevi Messages postés 15 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 2 mai 2016 8
2 mai 2016 à 10:15
Apèrs avoir encore un peu chercher, j'ai enfin trouver ce qu'il manquait. Il s'agit du vendor dans le fichier MANIFEST.MF.

J'ai donc créé ceci:

Manifest-Version: 1.0
Main-Class: be.fmpfbz.dicomupload.client.DicomUpload
Built-By: Kevin MORAY
Created-By: Kevin MORAY
Specification-Title: Java Advanced Imaging Image I/O Tools
Specification-Version: 1.1
Specification-Vendor: Sun Microsystems, Inc.
Implementation-Title: com.sun.media.imageio
Implementation-Version: 1.1
Implementation-Vendor: Sun Microsystems, Inc.


Mais je suis bloqué un peu plus loin avec cette erreur -> NoSuchElementException sur cette ligne
ImageReader reader = (ImageReader) iterator.next();

Il ne trouve donc pas ImageReader pour les DICOM

J'ai changé mon fichier manifest par ceci mais j'ai toujours la même erreur:

Manifest-Version: 1.0
Main-Class: be.fmpfbz.dicomupload.client.DicomUpload
Built-By: Kevin MORAY
Created-By: Kevin MORAY
Implementation-Title: dcm4che DICOM toolkit and utilities
Implementation-Version: 3.3.8-SNAPSHOT
Implementation-Vendor-Id: org.dcm4che
Implementation-Vendor: dcm4che.org
Specification-Title: dcm4che DICOM toolkit and utilities
Specification-Version: 3.3.8-SNAPSHOT
Specification-Vendor: dcm4che.org
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
morakevi Messages postés 15 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 2 mai 2016 8
2 mai 2016 à 14:45
J'ai trouvé une solution à ce problème :D

En regardant le code caché dans la méthode
ImageIO.scanForPlugins();
, j'ai remarquer qu'il charge les provider a partir des fichiers ImageReaderSpi situé dans le répertoire META-INF/services/.

j'ai donc trouvé la classe dédié au DICOM, étant donné que celle-ci ne se charge pas via la ligne
ImageIO.scanForPlugins();
, je la charge manuelle dans mon code comme ceci
IIORegistry.getDefaultInstance().registerServiceProvider(new DicomImageReaderSpi());


Ensuite j'ai regénéré mon JAR et tout fonctionne enfin :D.

Merci pour votre écoute :ptdr:
0