Развертывание Java-апплета, ClassNotFoundException (основной класс) - PullRequest
1 голос
/ 10 июня 2010

Это доводит меня до стены.Я проверил и перепроверил правописание и пути.Я испробовал практически все комбинации путей, включая относительные, абсолютные и полные http-пути.Я продолжаю получать следующую ошибку при попытке загрузить Java-апплет:

java.lang.ClassNotFoundException: AppletClient.class
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Exception: java.lang.ClassNotFoundException: AppletClient.class

HTML-код, используемый для загрузки апплета:

<applet width="100" height="100" archive="applet/myapplet.jar, applet/applet_dependency.jar" code="AppletClient.class">
    <param value="blahblah" name="username">
    <param value="false" name="codebase_lookup">
</applet>

Апплет находится в относительном каталоге "апплет ", от пути к текущей странице.Я разархивировал файл JAR и вижу AppletClient.class.Кроме того, в источнике проекта, это пишется именно так (корпус и все).Я пробовал с / без параметров.Я изменил имена архивных фляг в теге включения апплета только для того, чтобы увидеть, получаю ли я другую ошибку для неправильных имен файлов (та же ошибка).

Я вручную сделал GET на банках, чтобы убедиться, что сервер отвечает на запросы (это так).

Я пробовал с тэгом codebase и без него, со всеми различными путями (начинайте получать ошибки "магического числа" на них).

Я знаю, что эта ошибка иногда появляется, когдане удается загрузить зависимость, поэтому она может вводить в заблуждение, но все зависимости присутствуют, учитываются и могут быть получены с помощью ручных запросов GET.

Между каждой попыткой я всегда очищаю свой кэш в FireFox.Эти проблемы также воспроизводятся в IE8 и Chrome.

Для моей консоли Java из браузера я использую подключаемый модуль Java 1.6.0_20.Это с той же машины, на которой я разрабатываю апплет, который отлично работает через Eclipse.

Наконец, я нажал на Fiddler2, и нигде не вижу ни одного запроса на jar-файлы. Хост-сайтзапускается из моего отладчика Visual Studio, поэтому он работает на localhost.Но я вижу запросы на все остальные ресурсы на Fiddler.Просто ... без банок.В ЛЮБОМ МЕСТЕ.Я очистил журнал, очистил кеш браузера и сделал обновление ctrl-R.И все же, ни одного запроса Jar в журнале Fiddler.

Я даже сделал отложенную запись (с JS) тега апплета после загрузки страницы, как только вся активность Fiddler замедлилась.Элемент записывается в документ (и я вижу окно ошибки Java 100x100), но в Fiddler не появляется запрос single .

Любые предложения, прежде чем я заползаю взагнать себя в угол и плакать, чтобы уснуть?

РЕДАКТИРОВАТЬ: Если на консоли Java нажать «l» (el), чтобы «вывести список загрузчиков классов», я вижу что-то похожее на это:

Live entry: key=http://localhost:55446/BaseWebSite/,http://localhost:55446/BaseWebSite/applet/myappliet.jar, http://localhost:55446/BaseWebSite/applet/applet_dependency.jar, refCount=1, threadGroup=sun.plugin2.applet.Applet2ThreadGroup[name=http://localhost:55446/BaseWebSite/-threadGroup,maxpri=4]

РЕДАКТИРОВАТЬ 2: Апплет делает некоторые сети (Jabber / XMPP), поэтому я сделал самоподписанный сертификат, чтобы посмотреть, помогло ли это.Получите запрос относительно самоподписанного сертификата - так что он что-то читает - но все равно не работает.И это не отображается в списке файлов кэша Java ... и все еще ничего в Fiddler.

Ответы [ 2 ]

0 голосов
/ 11 июня 2010

Оказывается, моя проблема была на самом деле комбинацией проблем. Я бы временно решил один, но так как это не сработало (поскольку были другие проблемы), я бы вернулся назад и попробовал другой подход.

Я пробовал здесь так много разных вещей, что не уверен, что было точным исправлением. Но я думаю, что это сводилось к

1) Поскольку мой апплет использует сетевые компоненты (Jabber / XMPP), его необходимо подписать.

2) Несмотря на то, что на ранних этапах моего тестирования я подтвердил, что файл jar был упакован правильным образом, с корнем Applet.class, позже в своей отладке я создал скрипт сборки NAnt для упрощения сборки / подписать / развернуть процесс для меня. Этот скрипт сборки упаковывал jar-файл из рабочего каталога, который был , а не корнем приложения. Итак, AppletClient.class больше не был в корне, но вложен в несколько подкаталогов.

0 голосов
/ 10 июня 2010

Я думаю, что плагин Java имеет свой собственный кеш, который вы можете попробовать очистить.Я запускаю Windows, я нахожу это в моей панели управления.На вкладке «Общие» есть раздел «Временные файлы Интернета», посмотрите, можете ли вы найти там что-нибудь?

В диалоговом окне настроек я могу увидеть расположение кэшированных файлов .jars на моем жестком диске, и яВ некоторых случаях приходилось сбрасывать его вручную.

Кроме того, обязательно очистите кэш загрузчика классов, нажав x в консоли.

Просто чтобы убедиться, действительно ли AppletClientв пути к классам по умолчанию, то есть не в пакете?Если нет, вам нужно будет указать квалифицированное имя класса в разметке (code="your.package.AppletClient").

ОБНОВЛЕНИЕ:

Из конкретных предложений на данный момент, что вы могли бы сделать, если вы ужеесть попробовать другой стиль разметки и просто посмотреть, изменится ли что-нибудь.Вот что я использовал:

<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="380" height="260">
    <param name="code" value="AppletClient" />
    <param name="archive" value="applet/myapplet.jar,applet/applet_dependency.jar" />
    <comment>
        <embed
            code="AppletClient.class"
            type="application/x-java-applet;version=1.6"
            archive="applet/myapplet.jar,applet/applet_dependency.jar"
            width="380"
            height="260">
            <noembed>No Java Support.</noembed>
        </embed>
     </comment>
</object>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...