Как правильно указать базу кода и архив в апплете Java?

Я использую версию firefox > 3.5 (3.5., 3.6., 4.. *), и я стараюсь правильно указать свойства archive и codebase, но это не сработает. Мой основной класс для апплета находится в archive, а некоторые необходимые классы, загруженные во время выполнения, расположены в codebase. Если я укажу только archive, тогда апплет будет загружен, но классы из codebase отсутствуют. Если я укажу archive и codebase, тогда апплет не может быть загружен. Похоже, апплет пытается загрузить основной класс из папки codebase и не смотрит в файл archive.

<html>    
<body>
<applet width=600 height=300 code="MyClass.class" 
  type="application/x-java-applet;jpi-version=6" 
  archive="http://myurl.com/archive/myjar.jar" 
  codebase="http://myurl.com/classes">
    no applet
</applet>
</body>    
</html>

Основной класс находится в http://myurl.com/archive/myjar.jar, а классы времени исполнения находятся в http://myurl.com/classes.

Ответ 1

Атрибут codebase указывает базовый URL-адрес апплета - каталог, содержащий код апплета. Он используется во время поиска файлов jar в атрибуте archive таким образом, что все jars в атрибуте archive ищутся относительно codebase.
Так. Когда вы используете archive="http://myurl.com/archive/myjar.jar" и codebase="http://myurl.com/classes" вместе, это означает: найдите "http://myurl.com/archive/myjar.jar" в "http://myurl.com/classes" .
То есть полный путь поиска "http://myurl.com/classes/http://myurl.com/archive/myjar.jar" . И, конечно, его нельзя найти! Кроме того, классы, чьи jar файлы не указаны в атрибуте archive, не могут быть найдены без атрибута codebase. То есть если нет codebase, то нет возможности найти ваши классы в папке "http://myurl.com/classes.

Более подробную информацию вы найдете в учебном пособии Развертывание с тегом апплета.

Я предлагаю следующее решение:

  • Поместите myjar.jar в папку http://myurl.com/classes;
  • Предполагая, что ваш MyClass.class находится в пакете по умолчанию, а в "http://myurl.com/archive/myjar.jar, следующий код должен работать:

<html>    
<body>
<applet width=600 height=300 code="MyClass" 
  type="application/x-java-applet;jpi-version=6" 
  archive="myjar.jar" 
  codebase="http://myurl.com/classes">
   no applet
</applet>
</body>    
</html>