Апплет Jogl с JNLP работает в затмении, но не в браузере - PullRequest
2 голосов
/ 25 января 2011

Я разрабатываю апплет для некоторых вещей OpenGL ES, используя JOGL. В eclipse я могу запустить апплет, но в браузере у меня возникают проблемы, потому что консоль Java печатает NoSuchMethodError в моей строке, где я создаю экземпляр GLCanvas.

GLProfile glp = GLProfile.get(GLProfile.GL2ES2);

GLCapabilities caps = new GLCapabilities(glp);
caps.setSampleBuffers(true);
caps.setNumSamples(8);

glCanvas = new GLCanvas(caps); // throws NoSuchMethodError

Исключение:

Exception in thread "thread applet-de.beuthhochschule.bachelor.martin.Benchmark-1" java.lang.NoSuchMethodError: javax.media.opengl.awt.GLCanvas.<init>(Ljavax/media/opengl/GLCapabilities;)V
 at de.beuthhochschule.bachelor.martin.Benchmark.initComponents(Benchmark.java:60)
 at de.beuthhochschule.bachelor.martin.Benchmark.init(Benchmark.java:42)
 at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1620)
 at java.lang.Thread.run(Thread.java:662)

Я создал банку с и без jogl libs (jogl, gluegen, nativewindow и newt), но он просто не работал. У кого-нибудь есть идея?

Мой JNLP:

<?xml version="1.0" encoding="utf-8"?>
<jnlp href="applet-benchmark.jnlp" codebase=".">
  <information>
    <title>WebGL-Benchmark</title>
    <vendor>Martin Breuer</vendor>
    <homepage href="http://localhost/"/>
    <description>Native reference implementation</description>
    <description kind="short">Reference implementation of the WebGL Benchmark</description>
    <offline-allowed/>
  </information>

    <resources>
      <j2se href="http://java.sun.com/products/autodl/j2se" version="1.6+"/>
      <property name="sun.java2d.noddraw" value="true"/>
      <jar href="http://localhost/benchmark.jar" main="true"/>
      <extension name="newt-all-awt" href="http://jogamp.org/deployment/webstart/newt-all-awt.jnlp" />
    </resources>

  <applet-desc 
      name="WebGL-Benchmark"
      main-class="de.beuthhochschule.bachelor.martin.Benchmark"
      width="660" 
      height="500">
  </applet-desc>
</jnlp>

Тег моего апплета:

<applet codebase="." code="org.jdesktop.applet.util.JNLPAppletLauncher" width=600 height=400
  archive="http://jogamp.org/deployment/util/applet-launcher.jar,
           http://jogamp.org/deployment/webstart/nativewindow.all.jar,
           http://jogamp.org/deployment/webstart/jogl.all.jar,
           http://jogamp.org/deployment/webstart/gluegen-rt.jar,
           http://jogamp.org/deployment/webstart/newt.all.jar">
    <param name="codebase_lookup" value="true">
    <param name="subapplet.classname" value="de.beuthhochschule.bachelor.martin.Benchmark">
    <param name="subapplet.displayname" value="WebGL-Benchmark">
    <param name="noddraw.check" value="true">
    <param name="progressbar" value="true">
    <param name="jnlpNumExtensions" value="1">
    <param name="jnlpExtension1" value="http://jogamp.org/deployment/webstart/jogl-core.jnlp">
    <param name="java_arguments" value="-Dsun.java2d.noddraw=true -Dsun.java2d.opengl=false">
    <param name="jnlp_href" value="http://localhost/applet-benchmark.jnlp">
</applet>

Полный консольный журнал: http://pastebin.com/xjk84pTV (журнал частично переведен на немецкий, не знаю, как я могу это изменить ...)

обновление

Предоставление базовых библиотек jogl самостоятельно ничего не меняет ...

<resources>
    <j2se href="http://java.sun.com/products/autodl/j2se" version="1.6+"/>
    <property name="sun.java2d.noddraw" value="true"/>
    <jar href="http://192.168.0.39/jogl.all.jar" />  
    <jar href="http://192.168.0.39/newt.all.jar" />
    <jar href="http://192.168.0.39/nativewindow.all.jar" />
    <jar href="http://192.168.0.39/gluegen-rt.jar" />
    <jar href="http://192.168.0.39/benchmark.jar" main="true"/>
    <extension name="newt-all-awt" href="http://jogamp.org/deployment/webstart/newt-all-awt.jnlp" />
</resources>

Я также пытался загрузить апплет таким способом, но ничего не изменилось ...

<script src="http://www.java.com/js/deployJava.js"></script>
<script type="text/javascript">
    var attributes = {
        code:'de.beuthhochschule.bachelor.martin.Benchmark',
        width:660, height:500
    };
    var parameters = {jnlp_href: "applet-benchmark.jnlp"};
    var version = "1.6";
</script>
<script type="text/javascript">
    deployJava.runApplet(attributes, parameters, version);
</script>

Ответы [ 2 ]

2 голосов
/ 25 января 2011

Быстрая проверка: версия JRE, которую вы используете в Eclipse, совпадает с версией JRE, запущенной в вашем браузере?

1 голос
/ 26 января 2011

Я нашел причину: причина была в неправильном использовании библиотек. Библиотеки, которые я использовал, были предоставлены другим проектом, и кажется, что они старше текущей версии. Это означает, что библиотеки, загруженные апплетом, используют другой API, что приводит к исключению.

Вот мое "решение":

Java-код:

GLProfile glp = GLProfile.get(GLProfile.GL2ES2);
GLCapabilitiesImmutable caps = new GLCapabilities(glp);
glCanvas = new GLCanvas(caps);

Вызов апплета в html:

<script type="text/javascript">
    var attributes = {
        code:'de.beuthhochschule.bachelor.martin.Benchmark',
        width:660, height:500
    };
    var parameters = {jnlp_href: "applet-benchmark.jnlp"};
    var version = "1.6";
</script>
<script type="text/javascript">
    deployJava.runApplet(attributes, parameters, version);
</script>

И, наконец, мой JNLP:

<?xml version="1.0" encoding="utf-8"?>
<jnlp href="applet-benchmark.jnlp">
    <information>
        <title>WebGL-Benchmark</title>
        <vendor>Martin Breuer</vendor>
        <homepage href="http://192.168.0.39/" />
        <description>Native reference implementation</description>
        <description kind="short">Reference implementation of the WebGL Benchmark</description>
        <offline-allowed />
    </information>

    <resources>
      <j2se href="http://java.sun.com/products/autodl/j2se" version="1.4+" />
      <property name="sun.java2d.noddraw" value="true" />
      <jar href="http://192.168.0.39/benchmark.jar" main="true" />
      <extension name="newt-all-awt" href="http://jogamp.org/deployment/webstart/newt-all-awt.jnlp" />
    </resources>
    <applet-desc 
        name="WebGL-Benchmark"
        main-class="de.beuthhochschule.bachelor.martin.Benchmark"
        width="660" 
        height="500">
    </applet-desc>
</jnlp>
...