JApplet выдает ClassNotFoundException из подписанной банки

Я создал апплет (из JApplet), который использует несколько других файлов jar. Я подписал свою банку, содержащую основной класс, и включил все необходимые мне банки (я думаю). Однако, что бы я ни пытался, я постоянно получаю «java.lang.ClassNotFoundException: newposting», где «newposting» является основным классом в моей подписанной банке. Я использую для этого следующий html:

<p><applet code="newposting" 
archive="HartfordRowingNewPosting.jar, 
javax.mail.jar, 
jcalendar-1.4.jar, 
junit-4.6.jar, 
jgoodies-common-1.2.0.jar, 
jgoodies-looks-2.4.1.jar, 
mysql-connector-java-5.1.25-bin.jar" 
width="500" height="850">
<param name="permissions" value="sandbox" /> 
<param name="codebase" value="HartfordRowingNewPosting.jar" /> 
</applet></p>

Банки и html находятся в одной папке на сервере. Я пробовал несколько комбинаций спецификаций пути. Я также пытался использовать jnlp, но получаю ту же ошибку. Я был разочарован этим в течение последнего месяца или около того. Может ли кто-нибудь пролить свет на это?


person rrirower    schedule 27.08.2013    source источник


Ответы (1)


Тот факт, что ClassNotFoundException выбрасывается при загрузке вашего основного класса, означает, что либо ваш класс не может быть прочитан из jar, либо ваш jar не может быть найден.

Я надеюсь, что вы подтвердили, что ваш класс действительно в банке. Если не попробовать. На всякий случай попробуйте использовать unsigned jar и убедитесь, что у вас точно такая же ошибка.

Если это так, у вас все еще есть 2 возможности.

Вы уверены, что ваш класс действительно называется newposting? Нижний регистр? В пакете по умолчанию? Примечание. Это должно быть полное имя класса.

Затем проверьте, действительно ли ваша банка доступна для браузера. Для этого просто скопируйте и вставьте имя jar в браузер, добавив перед ним свой URL-адрес. Например, если HTML доступен по адресу http://myhost/myapp/mypage.html, попробуйте URL-адрес http://myhost/myapp/HartfordRowingNewPosting.jar.

Кстати, что означает параметр codebase? Это ваш параметр уровня приложения? Я не уверен, но убедитесь, что это не сбивает браузер с атрибутом codebase, поддерживаемым тегом applet. Этот атрибут обычно имеет значение .: <applet codebase=".", что означает «загрузить jar-файлы из текущего каталога». Это то же самое, что сказать java -cp . при запуске java из командной строки.

Кстати, знаете ли вы, что апплеты были почти устаревшими около 10 лет назад? Более того, насколько я вижу, вы включили драйвер MySql JDBC в свой путь к классу. Вы должны понимать, что в большинстве случаев это не сработает, потому что обычно есть брандмауэр, который не разрешает протокол JDBC между клиентами и сервером.

person AlexR    schedule 27.08.2013
comment
AlexR...спасибо за советы. Недавно я решил эту проблему, следуя java-консоли, которая показывала, где она искала мои банки. Путь был действительно неправильным. - person rrirower; 28.08.2013