ClassNotFoundException только если JAR подписан

Это головоломка!

У меня есть апплет в JAR. Когда JAR подписан - будь он самозаверяющим или с сертификатом DigiCert - я получаю ClassNotFoundException в основном классе апплетов. Когда я не подписываю апплет, он загружается просто отлично - (не считая ожидаемого SecurityException из-за того, что код не подписан).

Но я могу распаковать подписанный JAR и найти все, где он должен быть.

Самая странная часть заключается в том, что до последней недели настройка работала просто отлично. Такой же основной класс, самозаверяющий, тот же набор развертывания JS/HTML и т.д.

Любые мысли?

Вот сообщение об ошибке:

java.lang.ClassNotFoundException: com.spraklab.ilos.applet.Applet
at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:195)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Plugin2ClassLoader.java:249)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:179)
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:160)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Plugin2ClassLoader.java:690)
at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3045)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1497)
at java.lang.Thread.run(Thread.java:680)
2 ответа

Краткая версия: Нет дефис в именах JAR!

Драматическая история: В заключение! Много рабочих дней после обнаружения проблемы. Апплет загрузился нормально, если не подписан, буферизация ClassNotFoundException при подписании. Ответ о переключении загрузчиков классов заставил меня поверить, что в моем коде было что-то, что я изменил. Поэтому я отключил свой код до минимума. Но чтобы не перезапускать мой браузер все время и не очищать кеш и т.д., Я просто использовал режим инкогнито в Chrome. Я перестроил код. И все было в порядке. Не! Когда я тестировал его за пределами инкогнито, я снова получил ошибку.

Так в чем же разница? Рассмотрение журналов сервера показало, что Jar просто не запрашивался с сервера в обычном режиме! Я сравнил свой код еще раз с другим приложением с похожим встраиваемым кодом и увидел только одно отличие: я использовал дефис вместо подчеркивания в JAR-имени - что должно быть разрешено, и который работал нормально до тех пор, пока около 2 недель назад. Но не было также обновления Java около 2 недель назад...?!?!


В приведенном выше коде вы пытаетесь переключить безопасный класс загрузчика классов. Это недопустимо, так как Java 1.2.

licensed under cc by-sa 3.0 with attribution.