Nous obtenons souvent la trace de la pile suivante de nos utilisateurs de Windows:Comment détecter si la JVM a été mise à niveau sans redémarrer (sous Windows)?
java.lang.UnsatisfiedLinkError: sun.awt.image.ImageRepresentation.setBytePixels(IIII[BIILsun/awt/image/ByteComponentRaster;I)V
at sun.awt.image.ImageRepresentation.setBytePixels(Native Method)
at sun.awt.image.ImageRepresentation.setPixels(Unknown Source)
at sun.awt.image.ImageDecoder.setPixels(Unknown Source)
at sun.awt.image.GifImageDecoder.sendPixels(Unknown Source)
at sun.awt.image.GifImageDecoder.parseImage(Native Method)
at sun.awt.image.GifImageDecoder.readImage(Unknown Source)
at sun.awt.image.GifImageDecoder.produceImage(Unknown Source)
at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
at sun.awt.image.ImageFetcher.run(Unknown Source)
Cela se produit lorsque l'utilisateur a mis à jour Java, et tente ensuite d'exécuter notre application sans redémarrer d'abord. Apparemment, la mise à niveau de Java nécessite (comme tout le reste sous Windows) que la machine soit redémarrée pour ramener les choses à un état utilisable.
Ce n'est pas une exception que nous pouvons attraper, car aucun de notre code n'est dans la pile d'appels. Nous pouvons gérer l'exception d'un Thread.UncaughtExceptionHandler
, ce qui est ce que nous faisons maintenant. Nous aimerions plutôt avoir un moyen de vérifier au démarrage si nous sommes dans un état besoin de redémarrer après la mise à jour, soit en provoquant cette exception directement et en l'attrapant, soit en effectuant une autre vérification. (Actuellement, nous n'avons aucune idée de ce qui déclenche même cela ...) Est-ce que quelqu'un sait comment nous pourrions nous y prendre?
Est-ce que l'exception arrive avant que votre code est exécuté? –
@Grzegorz: Bonne question. Je ne sais pas, et je n'ai pas de machine Windows pour le tester. – uckelman