Как мне упаковать апплет с несколькими библиотеками .jar? - PullRequest
10 голосов
/ 13 мая 2010

Я создаю 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 NetBeans, должен ли я добавить апплет в проект в виде .jar или добавить весь проект?

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

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

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

Спасибо!

1 Ответ

15 голосов
/ 14 мая 2010

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

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

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

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

...