Как упаковать апплет с несколькими библиотеками .jar?

Я создаю апплет Java из крупномасштабного ранее существующего проекта (Vizster). Я использую NetBeans 6.7.1 с JDK 1.5 на Mac OS X.

Я пытаюсь запустить апплет из одного выходного файла .jar, но когда я это делаю, он говорит, что "апплет загружен" внизу экрана в Firefox, и ничего нет в консоли java, но ничего не показывает в окне для апплета. Раньше у меня были другие ошибки в Firefox, включая такие ошибки, как "appletNotLoaded: ClassDefNotFoundError", а также ошибки безопасности, но в моей консоли java никогда не было никакого вывода. Вот файл html для апплета:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <applet codebase ="." code="zuve.ZuveApplet.class"
            archive="ZuveApplet.jar"
            height="1000" width="1000"/>
  </body>
</html>

Где находится zuve.ZuveApplet.class, где находится мой основной метод, а "ZuveApplet.jar" - это имя выходного файла jar. Вот ZuveApplet.java, основной класс метода:

package zuve;

import vizster.Vizster;
import vizster.VizsterLib;
import java.applet.Applet;

 public class ZuveApplet extends Applet {
     public static final String DEFAULT_START_UID = "186297";

     @Override
     public void init() {
        new Vizster();
     }

    public static void main(String[] argv) {
        VizsterLib.setLookAndFeel();
        //String startUID = argv.length > 0 ? argv[0] : DEFAULT_START_UID;
        String startUID = DEFAULT_START_UID;
        String file = argv.length > 0 ? argv[0] : null;
        new Vizster(startUID, file);
    }
 }

Апплет работает отлично, как автономный (не встроенный в html), но мне нужно его встроить. Объект "Vizster" является расширением JFrame, поэтому я полагаю, что должен просто создать экземпляр этого объекта и добавить его в апплет. Может быть, это намного сложнее, чем это?

Я новичок в java и апплетах, к сожалению. Я видел много сообщений на форуме об исходной древовидной структуре, являющейся проблемой, поэтому:

1) Проблема в том, что я использую несколько пакетов? Все они находятся в директории src моего проекта.

2) есть ли что-нибудь, что мне нужно разместить в моем домашнем каталоге java? Я знаю, что у многих людей есть проблемы с classpath, но я использую современную среду IDE, которую, как я думал, позаботился обо всем этом для меня.

3) при импорте моего проекта в проект Java Web Application NetBeans, следует ли добавлять апплет в проект как .jar или добавить весь проект?

4) Первоначально, когда я создал этот апплет, у меня просто были несколько исходных файлов и куча библиотек .jar в качестве зависимостей, но когда я просмотрел вывод .jar, все, что я видел, это скомпилированные исходные файлы. Не было никаких следов файлов из библиотек. Так ли это должно быть? Я заметил, что если бы я переместил выходной файл .jar из его содержащей папки, он больше не мог работать автономно. Я думал, что .jars должны быть самодостаточными, разве это не так? Есть ли что-нибудь, что я должен знать о создании исполняемого банку?

5) на боковой ноте, должен ли размер апплета, обозначенный в тегах апплета в html, точно соответствовать размеру самого аплета?

Извините за огромный пост и невероятно туманную проблему, я работаю с командой, в которой никто не знает ничего о апплетах или Java (настоящий гениальный из нас, я знаю). Любая помощь или общие предложения действительно помогут.

Спасибо!

Ответ 1

В атрибуте архива можно указать несколько баночек:

<applet codebase ="." code="zuve.ZuveApplet.class"
        archive="ZuveApplet.jar,thing.jar,anotherThing.jar"
        height="1000" width="1000"/>

JFrame - это контейнер верхнего уровня, поэтому вы не сможете добавить его в свой апплет. Вы можете заставить апплет создать экземпляр вашего объекта и открыть его собственное окно. Более гибким подходом будет реорганизация вашего объекта в JPanel. Как JPanel, его можно добавить в JApplet или в JFrame, если вы также хотите поддерживать его как приложение.

Также посмотрите JNLP, поскольку это позволяет развернуть ваш код в виде апплета или приложения, а также предоставить API для печати и доступа к локальному файлу. Функциональность недоступна простым апплетам.