ClassNotFoundException в Java-апплете с использованием тега <object> - PullRequest
1 голос
/ 16 марта 2009

Я пытаюсь встроить Java-апплет с помощью тега , что является строгим XHTML-способом.

После просмотра большого количества сайтов я попробовал этот пример , который, кажется, работает очень хорошо:

<!--[if !IE]> Firefox and others will use outer object -->
  <object classid="java:Sample2.class" 
          type="application/x-java-applet"
          archive="Sample2.jar" 
          height="300" width="450" >
    <!-- Konqueror browser needs the following param -->
    <param name="archive" value="Sample2.jar" />
  <!--<![endif]-->
    <!-- MSIE (Microsoft Internet Explorer) will use inner object --> 
    <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" 
            codebase="http://java.sun.com/update/1.5.0/jinstall-1_5_0-windows-i586.cab"
            height="300" width="450" > 
      <param name="code" value="Sample2" />
      <param name="archive" value="Sample2.jar" />
      <strong>
        This browser does not have a Java Plug-in.
        <br />
        <a href="http://java.sun.com/products/plugin/downloads/index.html">
          Get the latest Java Plug-in here.
        </a>
      </strong>
    </object> 
  <!--[if !IE]> close outer object -->
  </object>
  <!--<![endif]-->

Я скачал этот Sample2.jar и отлично работает на localhost.

Теперь я заменил Sample2.class на тот, который мне нужно использовать (ar.uba.exactas.infovis.ivides.Scatterplot.class), и использую мои собственные файлы JAR (archive = "piccolo.jar piccolox.jar netscape. jar scatterplot.jar "):

<!--[if !IE]> Firefox and others will use outer object -->
<object
    classid="java:ar.uba.exactas.infovis.ivides.Scatterplot.class"
    type="application/x-java-applet"
    archive="piccolo.jar piccolox.jar netscape.jar scatterplot.jar"
    height="300" width="450" >
    <!-- Konqueror browser needs the following param -->
    <param name="archive" value="piccolo.jar piccolox.jar netscape.jar scatterplot.jar" />
<!--<![endif]-->
    <!-- MSIE (Microsoft Internet Explorer) will use inner object -->
    <object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
                    codebase="http://java.sun.com/update/1.5.0/jinstall-1_5_0-windows-i586.cab"
                    height="300" width="450" >
        <param name="code" value="ar.uba.exactas.infovis.ivides.Scatterplot" />
        <param name="archive" value="piccolo.jar piccolox.jar netscape.jar scatterplot.jar" />
        <strong>
            This browser does not have a Java Plug-in.
            <br />
            <a href="http://java.sun.com/products/plugin/downloads/index.html">
                Get the latest Java Plug-in here.
            </a>
        </strong>
    </object>
<!--[if !IE]> close outer object -->
</object>
<!--<![endif]-->

После этого я получаю этот дамп журнала:

java.lang.ClassNotFoundException: ar.uba.exactas.infovis.ivides.Scatterplot.class
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: open HTTP connection failed:http://localhost/infovisUBA/2008-2C/tpfinal/bin/ar/uba/exactas/infovis/ivides/Scatterplot/class.class
    at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
    at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    ... 7 more
Excepción: java.lang.ClassNotFoundException: ar.uba.exactas.infovis.ivides.Scatterplot.class

Единственное отличие, которое я вижу, заключается в том, что я использую класс внутри пакета.

Кроме того, обратите внимание, что я сделал эту работу с помощью тега , но я не могу сделать это с помощью .

Есть подсказка?

Ответы [ 4 ]

1 голос
/ 16 марта 2009

Вы случайно не написали это:

<param name="code" 
       value="ar.uba.exactas.infovis.ivides.Scatterplot.class" />
<param name="archive"
       value="piccolo.jar piccolox.jar netscape.jar scatterplot.jar" />

вместо:

<param name="code"
       value="ar.uba.exactas.infovis.ivides.Scatterplot" />
<param name="archive"
       value="piccolo.jar piccolox.jar netscape.jar scatterplot.jar" />

Разница заключается в отсутствии ".class" в конце значения кода. Судя по примеру, он должен находиться в конце атрибута classid, но не в конце значения для параметра code.

Вот что мне подсказывает трассировка стека:

Excepción: java.lang.ClassNotFoundException: 
    ar.uba.exactas.infovis.ivides.Scatterplot.class

Я бы не ожидал увидеть ".class" в конце имени класса.

0 голосов
/ 26 мая 2009

Ну, это было трудно ...

Боролся много времени, но наконец обнаружил, что проблема была в самой Opera. Я использовал альфа-версию с этой ошибкой. Теперь это прекрасно работает!

0 голосов
/ 23 марта 2009

У меня та же проблема с моим апплетом. Он работает нормально из IE, но не работает с ClassNotFoundException. Сообщение об ошибке указывает, что Java-плагин Firefox пытается загрузить файл класса с сервера отдельно, а не из предоставленного файла JAR.

Я узнал, что в Firefox порядок архива и атрибутов кода имеет значение. Моя оригинальная спецификация была:

applet name = "XYZ" code = "x.y.Applet" archive = "xxx.jar" codebase = "" width = '100%' height = '100%' mayscript = "mayscript"

Я изменил заказ на:

applet name = "XYZ" archive = "xxx.jar" code = "x.y.Applet" width = '100%' height = '100%' mayscript = "mayscript"

И теперь это работает.

0 голосов
/ 16 марта 2009

Если это не то, что предложил Джон Скит, то проверьте манифесты JAR-файла и убедитесь, что ссылка на основной класс не заканчивается на ".class". Исключение:

Excepción: java.lang.ClassNotFoundException: 
  ar.uba.exactas.infovis.ivides.Scatterplot.class

указывает, что каким-то образом вы говорите Java запускать ar.uba.exactas.infovis.ivides.Scatterplot.class вместо ar.uba.exactas.infovis.ivides.Scatterplot. Вам просто нужно найти, где это происходит.

Также обратите внимание, что в середине дампа исключений следующая жалоба (завернутая мной):

Caused by: java.io.IOException:
 open HTTP connection failed:
 http://localhost/infovisUBA/2008-2C/tpfinal/
        bin/ar/uba/exactas/infovis/ivides/Scatterplot/class.class

он как-то пытается загрузить не тот класс ... у вас есть лишний ".class" или "/class" где-то в вашем HTML. Просто, чтобы попробовать это, если вы еще не пробовали это, замените

classid="java:ar.uba.exactas.infovis.ivides.Scatterplot.class"

с

classid="java:ar.uba.exactas.infovis.ivides.Scatterplot"

Кроме того, вы получаете одно и то же исключение в обоих браузерах?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...