Класс не найден Исключение при запуске апплета с использованием JNLP

Я столкнулся с проблемой при попытке запустить файл jar с помощью JNLP. Ранее мы без проблем запускали апплет без JNLP. Мы хотим запустить три разных jar-файла, которые хранятся в одном каталоге вместе с файлом jnlp. Все jar загружаются, но мы видим classNotFoundError, как только пытаемся загрузить класс из одного из внешних jar (то есть тех, которые не являются основным). Приложение работает до тех пор, пока это не произойдет, поэтому наша основная банка, похоже, выполняется. Файл JNLP выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" href="/jars/file.jnlp">
<information>
    <title>Client</title>
    <vendor>My Vendor</vendor>
    <description>Description</description>
    <description kind="short">Desc</description>
    <offline-allowed />
</information>
<security>
    <all-permissions />
</security>

<resources>
    <j2se version="1.6+" />
    <jar href="mainJar.jar" main="true" download="eager"/>
    <jar href="extJar1.jar" main="false" download="eager"/>
    <jar href="extJar2.jar" main="false" download="eager" />
</resources>
<applet-desc 
    name="MyApp" 
    main-class="path-to-main-class"
    width="1"
    height="1">
</applet-desc>
</jnlp>

Затем апплет запускается из HTML-файла следующим образом:

<applet
    code="com.mycompany.net.MyMainClass" 
    name="MyApp" 
    archive="/jars/extJar1.jar, /jars/extJar2.jar, /jars/mainJar.jar" 
    id="myId" 
    width="1" 
    height="1" 
    mayscript
    alt="The java plugin must be installed.">
            <param name="jnlp_href" value="/jars/file.jnlp"/>
    Java 1.5 or higher required.  
</applet>

Затем я проверил jnlp с Janela, который не дает мне ошибок. Он работает для запуска апплета из Eclipse, а также без файла jnlp. Это также работает, чтобы открыть jnlp-файл из javaws, указав либо файл, либо URL-адрес файла. Это заставляет меня думать, что это неправильный html. Это, однако, насколько я получил. Я попытался запустить следующий javascript с тем же результатом:

<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var attributes = {
        id:'myId', 
  code:'com.mycompany.net.MyMainClass', 
  width:1, 
  height:1, 
  name:"MyApp"
};
    var parameters = {
        jnlp_href:"/jars/file.jnlp",
        archive:"/jars/extJar1.jar, /jars/extJar2.jar, /jars/mainJar.jar",
    };
deployJava.runApplet(attributes, parameters, '1.6');


person Erik    schedule 19.04.2012    source источник
comment
Я не вижу ничего плохого ни в JNLP (хороший призыв к использованию JaNeLA), ни в элементе апплета/JS. В каких браузерах вы тестируете?   -  person Andrew Thompson    schedule 20.04.2012
comment
Хром и Фаерфокс. Я думаю, что нашел свою первопричину. Как только все банки загружены, сервер получает новый запрос, запрашивающий класс, который позже не будет найден. Но почему он ищет файл класса в моей папке jar, а не в банке?   -  person Erik    schedule 20.04.2012
comment
Параметр Codebase в теге jnlp ? Во всяком случае, это было в моем ответе.   -  person Fuhrmanator    schedule 20.04.2012
comment
Мне удалось заставить его работать, возвращая 404 вместо перенаправления, когда он пытается найти файл класса на сервере. Я понятия не имею, почему он вообще обращается к серверу за файлами классов, но это следующий шаг, который нужно выяснить. По крайней мере сейчас работает..   -  person Erik    schedule 20.04.2012
comment
@Erik Пример 4 кажется близким к вашей ситуации, хотя вы не указали путь к HTML-файлу примера. Если его нет в папке /jars/, то неявная кодовая база будет указывать на тот же каталог, что и ваш HTML-файл.   -  person Fuhrmanator    schedule 20.04.2012
comment
@Fuhrmanator Мои файлы jar находятся в той же папке, что и мой файл jnlp, поэтому по умолчанию он должен быть в правильной папке. Чего я не понимаю, так это почему он ищет файлы моего класса на сервере, а не сначала ищет в банках. Сейчас он пытается получить доступ к /jars/org/company/../.class вместо /jars/extJar1/org/company/../.class.   -  person Erik    schedule 20.04.2012
comment
@Erik, где находится файл HTML в том пути доступа, который вы указали?   -  person Fuhrmanator    schedule 20.04.2012


Ответы (1)


Мои JNLP используют внешние банки, и я определил codebase="http://example.com/full/path/to/jars/", а также href="http://example.com/full/path/to/jars/file.jnlp" в теге <jnlp>.

Изменить Попробуйте мой рабочий пример — нажмите кнопку Lancer le planificateur увидеть его в действии.

edit2 проверить JNLP как апплет на странице HTML чтобы узнать, поможет ли Object вместо Applet.

person Fuhrmanator    schedule 19.04.2012