2011-01-25 3 views
2

Je suis en train de développer une applet pour certaines choses OpenGL ES en utilisant JOGL. En éclipse, je peux lancer l'applet mais dans le navigateur j'ai des problèmes car la console java imprime un NoSuchMethodError dans ma ligne où je crée une instance de GLCanvas.Jogl Applet avec JNLP fonctionne en éclipse mais pas dans le navigateur

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

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

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

L'exception:

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) 

J'ai créé un pot avec et sans les libs JOGL (jogl, gluegen, NativeWindow et tritons) mais ça ne fonctionnait pas. Est-ce que quelqu'un a une idée?

Mon 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> 

Mon tag applet:

<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> 

Le journal de la console complète: http://pastebin.com/xjk84pTV (le journal est partiellement traduit en allemand, ne sais pas comment je peux changer cela ...)

mise à jour

Fournir les bibliothèques JOGL de base par moi-même ne change rien ...

<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> 

J'ai aussi essayé de charger l'applet de cette façon, mais rien changé ...

<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> 
+0

Activer traçage complet dans la console Java de sorte que vous pouvez s ee ce qui se passe pendant le chargement. C'est très probablement une dépendance brisée. –

+0

Pastebin du journal: http://pastebin.com/xjk84pTV Tout ce que je peux voir a l'air bien, mais je suis absolument nouveau à ce ... – WarrenFaith

+0

Lorsque j'ajoute mes bibliothèques au '' je reçois une autre exception de lien insatisfait – WarrenFaith

Répondre

1

J'ai trouvé la raison: La raison en était une utilisation erronée des bibliothèques. Les bibliothèques que j'ai utilisées ont été données par un autre projet et il semble qu'elles soient plus anciennes que la version actuelle. Cela signifie que les bibliothèques téléchargées par l'applet utilisent une autre API qui entraîne l'exception.

Voici ma "solution":

code Java:

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

Appeler l'applet en 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> 

Et enfin mon 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> 
2

chose rapide pour vérifier, est la version de JRE que vous utilisez dans Eclipse est la même que la version de JRE exécutée dans votre navigateur?

+0

ce n'était pas mais changer ça n'aide pas. J'ai ajouté le journal complet de la console à la fin de la question. – WarrenFaith

Questions connexes