Applets sous Linux / Firefox
Si les applets ne fonctionnent pas sous Linux avec Firefox, il suffit de créer un lien entre Firefox et la JRE. Depuis le répertoire plugins de firefox, créer un lien vers le fichier libjavaplugin_oji.so situé dans le répertoire plugin/i386/ns7, pour une JRE 5, ou plugin/i386/ns610-gcc32, pour une JRE 1.4.2 :
ln -s /usr/java/jdk1.5/jre/plugin/i386/ns7/libjavaplugin_oji.so
ou
ln -s /usr/java/jdk142/jre/plugin/i386/ns610-gcc32/libjavaplugin_oji.so
Cette technique fonctionne pour Firefox ou pour Mozilla. Le répertoire de plugin est dans le répertoire d’installation de Firefox (/usr/local/firefox/plugins, par exemple) ou dans le répertoire home de l’utilisateur (~/.mozilla/plugins).
Remarques :
-
Les répertoires dépendent évidemment de l’installation !
-
Pour les versions anciennes de Mozilla, utiliser plugin/i386/ns610
URL avec protocole classpath
La classe java.net.URL offre la possibilité de travailler avec plusieurs protocoles, qui sont mis en oeuvre par l’implémentation d’un URLStreamHandler. Par exemple, pour se connecter au site 'ftp.debian.org', il suffit d’instancier un objet URL de la façon suivante :
URL url = new URL("ftp://ftp.debian.org/debian/README");
Le JDK est ainsi livré avec les protocoles suivants : file, http, ftp, mailto, gopher et jar. Le protocole jar est intéressant lorsque l’on veut travailler avec une URL qui pointe sur une ressource présente dans un fichier jar. Cependant, son utilisation est contraignante car il faut désigner explicitement le fichier jar pour accéder à une ressource. Par exemple :
URL url = new URL("jar:file:c:\\repertoire\\archive.jar!/images/une_image.gif");
En particulier, il ne donne pas la possibilité de référencer un fichier présent dans le classpath, non packagé dans une archive (ce qui est souvent le cas lorsque l’on travaille avec un IDE).
Le protocole classpath n’étant pas fourni avec le JDK, voici comment le créer :
1. La classe handler
Il faut créer une classe avec le nom Handler (pas le choix du nom !) qui hérite de URLStreamHandler.
public class Handler extends URLStreamHandler {
protected URLConnection openConnection(URL url) throws java.io.IOException {
URL classpathUrl = Handler.class.getClassLoader().getResource(url.getPath());
if (classpathUrl == null)
throw new FileNotFoundException(url.toExternalForm());
return classpathUrl.openConnection();
}
}
Le nom du package de cette classe doit se terminer par le nom du protocole à implémenter. Par exemple : org.monsite.classpath.
2. Incrire le handler
L’incription du handler se fait en déclarant la propriété système Java java.protocol.handler.pkgs, soit dans le code, soit en paramètre de lancement de la machine virtuelle :
System.setProperty("java.protocol.handler.pkgs", "org.monsite.classpath");
ou
java -Djava.protocol.handler.pkgs=org.monsite.classpath
La machine virtuelle connait alors d’une part le nom du protocole en lisant la dernière partie du package (dans notre cas 'classpath'), et d’autre part la classe d’implémentation qui se nomme nécessairement Handler.
3. Utilisation
Instancier une URL :
URL url = new URL("classpath:images/une_image.gif");
Afficher une image dans un JEditorPane :
String html = "<img src=\"classpath:images/une_image.gif/>";
JEditorPane pane = new JEditorPane("text/html", html);