Мы часто получаем следующую трассировку стека от наших пользователей 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)
Это происходит, когда пользователь обновил Java, а затем пытается запустить наше приложение без перезагрузки. Очевидно, что для обновления Java (как и всего остального в Windows) требуется перезагрузить компьютер, чтобы вернуть его в рабочее состояние.
Это не исключение, которое мы можем поймать, поскольку ни один из нашего кода не находится в стеке вызовов. Мы можем обработать исключение из Thread.UncaughtExceptionHandler
, что мы и делаем сейчас.
Вместо этого мы хотели бы иметь возможность при запуске проверить, находимся ли мы в состоянии перезагрузки после обновления, либо вызвав это исключение напрямую и перехватив его, либо выполнив какую-либо другую проверку. (В настоящее время мы понятия не имеем, что даже вызывает это ...) Кто-нибудь знает, как мы можем это сделать?