Попытка загрузить java-апплет через html-файл

#java #html #applet #localhost

#java #HTML #апплет #localhost

Вопрос:

Каталог выглядит так:

 test.html
blah
hmmm
  

Внутри «blah» у нас есть все файлы апплета, включая blahBlah.class . Внутри «хммм» находятся еще несколько файлов классов, которые были взяты из библиотеки или чего-то еще, они также используются проектом.

Я пишу в test.html …

 <applet name="blah" code="/blahBlah.class" codebase="blah"></applet>
  

(наряду со всеми другими вариантами, о которых я мог подумать)

Самое большее, что я получил, это:

 java.lang.NoClassDefFoundError: blahBlah (wrong name: blah/blahBlah)
  

Теперь внутри blahBlah.java у нас есть:

 package blah;
  

Я не уверен, связано ли это.

Также интересно, может быть, необходимо поместить проект в файл jar и установить атрибут archive апплета?

Настоящие файлы — это не бла-бла-бла, но я точно заменил имена.

Комментарии:

1. @Downvoter: незнание апплетов не является веской причиной для понижения. Это совершенно ясный и обоснованный вопрос.

Ответ №1:

java.lang.Ошибка NoClassDefFoundError: Бла-бла-бла (неправильное название: бла-бла-бла)

По сути, это означает, что он был выполнен как

 java blahBlah
  

вместо

 java blah.blahBlah
  

Другими словами, ваш code атрибут неверен. Это должно быть

 <applet name="blah" code="blah/blahBlah.class" />
  

или просто с помощью FQN (см. Также комментарий Эндрю)

 <applet name="blah" code="blah.blahBlah" />
  

codebase По умолчанию используется текущая папка, что в данном случае нормально, поэтому она удалена. Альтернативой является помещение его в другую папку, например /applet или что-то в этом роде. Вы должны, по крайней мере, использовать не папку пакета в качестве базы кода, а вместо этого корневой каталог пакета.

Комментарии:

1. Огромное спасибо. Это работает, и, более того, он работает для его обслуживания через сервер, что было моим первоначальным намерением.

2. blah/blahBlah.class может допускаться, но blah.blahBlah (полное имя) указано правильно.

3. @Andrew: AFAIK, это работает, только если оно поставляется из JAR-архива. У OP есть класс plain в общественном достоянии. Тогда вам действительно нужно будет указать URI в code . Если бы он был упакован в JAR, то <applet archive="Blah.jar" code="blah.blahBlah"> это действительно единственный способ.

4. «это работает, только если оно поставляется из JAR-архива». Быстрый тест показывает, что он работает без Jar. Я был бы рад доказать это вам по отдельному вопросу, но если вы поверите мне на слово и отредактируете ответ, я просто проголосую «за» и оставлю все как есть. Меня беспокоит, что кто-то столь же полезный, как вы, советует использовать эту устаревшую форму атрибута code, повторяющуюся во многих элементах апплета, которые можно увидеть в руководствах Sun (я полагаю, что именно здесь возникает это заблуждение).

5. @Andrew: справедливое замечание. Прошло довольно много времени с тех пор, как я в последний раз возился с апплетом 🙂