2011-01-04 5 views
0

Mein Applet sieht die externen Bibliotheken nicht. Alles funktioniert mit dem Appletviewer, aber nicht mit dem Browser.Applet und Bibliotheken

<applet code="gui.Gui" archive="TreC-Vis.jar,postgresql-8.4-701.jdbc4.jar,postgis_1.5.0.jar,jfreechart-1.0.13.jar,jcommon-1.0.16.jar" width="1024" height="768"> </applet> 

Java: Ich habe in meinem „test_applet“ put Ordner das Glas (TREC-Vis.jar) mit den Applet-Klassen, vier jar-Bibliotheken von TREC-Vis und die HTML-Datei mit folgendem Applet-Tag verwendet Die Konsole gibt mir eine java.io.FileNotFoundException für jede der vier Jar-Bibliotheken. Ich gebe an, dass ich TreC-Vis.jar aus dem entsprechenden Eclipse-Projekt exportiert habe, in dem ich diese Bibliotheken in einen "lib" -Ordner auf der gleichen Ebene des "src" -Pakets gestellt habe.

Was ist los mit dem Applet-Tag, das ich geschrieben habe? Lesen Sie das Tutorial hier

http://download.oracle.com/javase/tutorial/deployment/jar/downman.html

Ich habe die Möglichkeit in Erwägung gezogen, alles zu setzen, Applet und Bibliotheken, in einem Glas als Lösung, aber ich würde einige Beispiele für den „benutzerdefinierten Code“ erwähnt muß in die Notiz. Vielen Dank im Voraus.

+0

Diese Bibliotheken sind der Postgres JDBC-Treiber, seine räumliche Erweiterung PostGIS, etc ... Sie sind nur native Bibliotheken, ich habe sie aus dem Internet heruntergeladen, ohne Änderungen vorzunehmen und Eclipse markiert ihre .class-Dateien mit einem Symbol "J010" – mattia

Antwort

0
jar cfm MyApplet.jar MyManifest.txt MyPackage1 MyPackage2 MyPackage3 

Dies war die Linie, die ich suchte. Auf diese Weise habe ich in meinen Manifest den Klassenpfad der externen Bibliotheken eingetragen.

0

Mein Applet sieht die externen Bibliotheken nicht. ..Sie sind nur native Bibliotheken, .. .Class-Dateien ..

OK. Wenn Sie dann "Eingeborene" wie in Dateien vom Typ .dll, .so usw. meinen, ist das für ein Applet problematisch, da sie die Eingeborenen nur verwenden können, wenn sie bereits im entsprechenden Verzeichnis des Benutzersystems installiert sind.

Allerdings erlauben uns die jüngsten Entwicklungen, ein eingebettetes Applet mit Java Webstart (JWS) zu implementieren. JWS nutzt die Einheimischen einfach. Setzen Sie sie einfach in den Stamm einer Jar-Datei und fügen Sie sie einem nativenLib-Element in der (XML-basierten) Startdatei (Dateityp .jnlp) hinzu.

Noch besser, JWS kann die Downloads in Ressourcen für verschiedene Betriebssysteme trennen, so dass Windows die .dll-Natives bekommt, während * nix die .so-Natives bekommt.

JWS bietet viele weitere nützliche Funktionen, aber das Wichtigste ist, dass sie Eingeborene für Applets verfügbar machen können.

Die Verwendung nativer Bibliotheken in einem Applet erfordert, dass das Applet vertrauenswürdig ist.

+0

Ich werde einfacher und direkter sein. Wie würden Sie diesen Befehl ändern: "jar cmf myManifest.txt myAppletFile.jar \ *. Class", um den * .class-Teil durch die vier Pakete mit .class-Dateien meines Applets zu ersetzen? Auf diese Weise sollte es mir möglich sein, das Applet-Jar mit meinem eigenen Manifest zu erstellen, das auf die externen Bibliotheken verweist. – mattia

0

Hier ist mein Code und wie ich native Bibliotheken in diesem verwendet habe. Es funktioniert in windowes, aber es funktioniert nicht in Linux und ich erhalten

Zugriff verweigert ("java.lang.RuntimePermission" "loadLibrary.hello")

Hier ist meine JNLP:

<?xml version="1.0" encoding="UTF-8"?> 
<jnlp spec="1.0+" codebase="" href=""> 

    <resources> 
     <!-- Application Resources --> 
     <j2se version="1.7+" 
       href="http://java.sun.com/products/autodl/j2se"/> 
     <jar href="applet.jar" main="true" /> 
     <nativelib download="eager" href="libhello.jar"/> 
    </resources> 
    <applet-desc 
     name="Math Applet" 
     main-class="NativeHelloApplet" 
     width="10" 
     height="1"> 
    </applet-desc> 
    <update check="background"/> 
</jnlp> 

Mein Applet:

import java.security.*; 
import javax.swing.*; 

public class NativeHelloApplet extends JApplet 
{ 
    public native String displayHelloWorld(); 
    public native int initPKE (int[] retVal); 

    public NativeHelloApplet() { 
    } 

    public void init() 
    { 
     // privileged code goes here, for example: 
     System.loadLibrary("hello"); 
     getContentPane().add(new JLabel("Test")); 
     getContentPane().add(new JLabel(displayHelloWorld())); 
    } 
} 

Meine Mutter.C-Code:

#include <jni.h> 
#include "NativeHelloApplet.h" 
#include <stdio.h> 

JNIEXPORT jstring JNICALL 
Java_NativeHelloApplet_displayHelloWorld(JNIEnv *env, jobject obj) 
{ 
    return (*env)->NewStringUTF(env,"Hello world!\n"); 
} 

Meine HTML-Seite:

<Html> 
<Head> 
<Title>Java Example</Title> 
</Head> 
<Body> 
This is my page<br> 
Below you see an applet<br> 
<br> 
<script language="javascript" type="text/javascript" src="deployJava.js"></script> 
<script> 
      var attributes = { 
       id:   "sswSignApplet", 
       code:  "NativeHelloApplet", 
       width:  300, 
       height:  60 
      }; 
      var parameters = {jnlp_href:"launch.jnlp"}; <!-- Applet Parameters --> 
      var version = "1.6"; <!-- Required Java Version --> 
      deployJava.runApplet(attributes, parameters, version); 
     </script> 
</Body> 
</Html> 

libhello.jar enthält das gemeinsame Objekt meines nativen Code und ist auf dem gleichen Ordner wie html und jnlp entfernt.

Es funktioniert in Windows, wenn ich hello.jar (mit hello.dll) im Ressourcenabschnitt, aber in Linux habe ich den erwähnten Fehler erhalten.