Fin du plugin Java, comment convertir ses applets


Pour des raisons de sécurité, le plugin Java est en fin de vie et il est de plus en plus difficile d’accéder aux applets Java.

Le problème est que nous sommes nombreux à avoir développé des applets, notamment à des fins pédagogiques. Il est dommage que ces efforts soient perdus. Me concernant, j’ai écrit de nombreuses applets à la fin des années 1990 et au début des années 2000, en particulier pour illustrer mes livres. Alerté par mes lecteurs des difficultés qu’ils rencontraient, j’ai décidé de voir ce qu’il était possible de faire.

J’ai constaté, qu’il est relativement facile de convertir ces logiciels pour qu’ils puissent être utilisés sur les systèmes modernes. Comme on trouve peu de synthèse générale de la démarche, il m’a semblé pertinent de partager mon expérience. Qu’il soit clair que je n’avais que peu de temps à consacrer à l’opération et que la démarche est donc essentiellement “Q&D”. Elle présente toutefois les concepts essentiels et devrait faciliter la tâche de ceux qui voudront ensuite aller plus loin (et plus proprement).

Principes

Puisqu’on ne peut plus lancer les applets directement depuis le navigateur, nous allons :

De l’applet à l’application

Les applets Java étendent la classe applet et s’initialisent avec la méthode init().
package uneApplet;
import java.applet.*;
import java.awt.*;

public class monApplet extends Applet {
}

public void init() {
    fonctions d'initialisation
}

Les applications ont besoin d’une méthode main() comme point d’entrée. Pour transformer une applet en application, il suffit de construire une méthode main() qui construit une instance de l’objet principal et de transférer dans le constructeur de cet objet la séquence d’initialisation (ce que je trouve plus propre qu’un simple appel à la méthode d’initialisation de l’applet).

package uneApplet;
import java.awt.*;
 
public static void main(String[] args) {
    monApplet a=new monApplet();
}

public class monApplet {
    fonctions d'initialisation
}

Construction de l’archive jar

La conversion terminée, on peut compiler (javac) le programme et construire l’archive jar.

On crée un dossier de travail et on y met les fichiers class dans un dossier du nom du package. Si d’autres packages sont nécessaires, on ajoute les dossiers correspondants.

Pour que l’application puisse s’exécuter, le point d’entrée doit être précisé. C’est le rôle du fichier manifeste. On crée donc un fichier (classiquement MANIFEST.MF ou META-INF/MANIFEST.MF) qui, à minima, précise la classe d’entrée.

Manifest-Version: 1.0
Main-Class: uneApplet.monApplet

On peut alors lancer la construction de l’archive :

jar cvmf MANIFEST.MF monApplet.jar ./uneApplet/*.class ./unAutrePackage/*.class

L’archive doit pouvoir s’exécuter directement :

java -jar monApplet.jar


Construction d’un exécutable Linux à partir d’une archive jar

On peut générer un exécutable Linux à partir d’un jar avec gcj. Il suffit de préciser le nom de l’archive, celui de l’exécutable et la classe d’entrée :

gcj monApplet.jar -o monApplet.run --main=uneApplet.monApplet

On pourra alors lancer l’exécutable avec ./monApplet.run sans qu’il y ait nécessité d’une quelconque dépendance.

Construction d’un exécutable Windows à partir d’une archive jar

Launch4j , qui existe aussi bien pour Linux, Windows que macosx, permet de réaliser directement cette conversion. Il suffit de préciser le nom de l’exécutable Windows et celui de l’archive jar. Il conviendra également de préciser la version minimale du JRE dans l’onglet JRE (1.5.0 par exemple).

Launch4J

On obtient un fichier exe que l’on peut directement lancer sous Windows.

Comment utiliser Java Web Start

Java Web Start permet de lancer l’application directement à partir du navigateur. C’est le successeur naturel des applets. Pour ca, il faut construire un fichier monApplet.jnlp qui précisera comment exécuter le programme.

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="http://URLDuLieuOuEstLeFichier/monApplet.jnlp">
  <information>
    <title>Applet</title>
    <vendor>moi</vendor>
  </information>
  <resources>
    <jar href="monApplet.jar" />
  </resources>
  <application-desc
    name="Applet"
    main-class="uneApplet.monApplet"
    >
  </application-desc>
  <update check="background"/>
</jnlp>


codebase doit faire référence à l’endroit où est stocké le fichier jnlp sur le site web et main-class précise la classe d’entrée.
Il suffit ensuite d’insérer la balise de lancement dans sa page web.

<a href="monApplet.jnlp">Lancez mon Application</a>

Quand l’utilisateur cliquera sur Lancez mon Application, celle-ci devrait démarrer.

Conclusion

Rien de très compliqué donc pour convertir ses anciennes applets, mais quelques efforts sont tout de même nécessaires !

fleche-up.png

Date de dernière mise à jourJan 23, 2014