Java Web Start - ClassNotFoundException при запуске - PullRequest
2 голосов
/ 07 июля 2011

Я сейчас пытаюсь развернуть приложение Java с Java Web Start. Приложение работает нормально, когда работает автономно. Я экспортировал проект как исполняемый файл .jar, а затем написал соответствующий файл jnlp.

Однако при запуске из файла jnlp приложение возвращает следующую ошибку при запуске:

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: someClass
........
Caused by: java.lang.ClassNotFoundException: someClass
.........

Я экспортировал файл .jar с помощью Eclipse Helios с опцией «Упаковать необходимые библиотеки в сгенерированный JAR».

Вот как выглядит мой файл jnlp (я подставил некоторую информацию):

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" 
    codebase="................" 
    href="thisJNLP.jnlp">
    <information>
        <title>Whatever</title>
        <vendor>Whatever</vendor>
    </information>
    <security>
        <all-permissions/>
    </security>

    <resources>
        <!-- Application Resources -->
        <j2se version="1.6+"
              href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="signed.jar" main="true" />

    </resources>
    <application-desc
         name="Whatever"
         main-class="thisProject.main"
         width="300"
         height="300">
     </application-desc>
     <update check="background"/>
</jnlp>

Кроме того, я использую WebLogic 10 для размещения файлов, но сомневаюсь, что это что-то изменит.

Может ли кто-нибудь мне помочь?

Спасибо за любые комментарии!

1 Ответ

1 голос
/ 08 июля 2011

Из Руководства разработчика по WebStart :

Все ресурсы приложения должны быть извлечены из файлов JAR, указанных в разделе ресурсов файла JNLP, или получены явным образом с использованием HTTP-запроса к веб-серверу. Рекомендуется сохранять ресурсы в JAR-файлах, поскольку Java Web Start будет кэшировать их на локальном компьютере.

Таким образом, механизм загрузки классов отличается для приложений WebStart. Я предполагаю, что это опция упаковки «Упаковать необходимые библиотеки в сгенерированный JAR», которая вызывает проблемы в вашем случае.

Содержится ли класс someClass в банке, содержащейся в вашем файле signed.jar? Если это так, то это подтвердит эту теорию - попробуйте сгенерировать отдельные файлы jar (не забудьте подписать их все!) И сослаться на каждый из них в разделе <resources> как отдельную запись <jar>

...