Exécuter le fichier Jar d'un projet JavaFX, comment finir avec "ClassNotFoundException" ?
>> 02 April 2009
Déployer une application JavaFX "stand alone", sous forme de Jar ne pose pas de problèmes particuliers
Le tutoriel sur le site de javafx.com explique tout et en détail.
http://javafx.com/docs/tutorials/deployment/
Mais comment faire, si on veut exécuter le jar normalement sous la forme de
java -jar nomDeFichier.jar et sans donner tous les fichiers nécessaires sur la ligne de commande ?
Note :
Ce petit tutoriel est une démo en local. Lisez attentivement la licence de JavaFX, concernant la distribution de fichiers.
Nous commençons par créer un petit projet JavaFX dans NetBeans
File -> New Project
Sélectionnez JavaFX -> JavaFX Script Application -> Next
Donnez un nom à votre projet dans "Project Name", le nom du projet d'exemple est HelloWorld.
Laissez les autres options comme tel -> Finish
Le projet est créé et Main.fx est ouvert dans l'éditeur
Note :
Le nom du package dans l'exemple est "helloworld", la classe produite va porter le nom :
"Main.class"
Verifier les configurations d'exécution
Un clic droit sur le projet -> Properties -> Run
Assurez-vous que le mode d'exécution est "Standard Execution" (Par défaut)
Construire (Build) le projet
Un clic droit sur le projet -> Build Project
Deux dossiers sont ajoutés dans le projet : (Dans l'exemple NetBeansProject/HelloWorld) "dist" et "build"
"build" contient les classes compilées
"dist" contient un fichier jar contenant les classes compilées.
Exécutez HelloWorld.jar
Changez de dossier pour aller dans le dossier "dist" dans le projet (dans l'exemple /home/kas/NetBeansProjects/HelloWorld/dist), à modifier selon votre projet.
$cd /home/kas/NetBeansProjects/HelloWorld/dist
Localisez le dossier de JavaFX SDK
Si vous avez suivi mon article concernant l'installation de NetBeans-6.5.1 et son plug-in de JavaFX
(http://java-javafx-iipt.blogspot.com/2009/03/javafx-111-et-netbeans-651-sur-linux.html), vous trouverez le dossier "javafx-sdk" dans le chemin suivant
$HOME/.netbeans/6.5/javafx-sdk
A partir de la ligne de commande (dans un terminal) en utilisant export ou en indiquant le chemin complet (absolu) vers le dossier "bin" de "javafx-sdk",
tapez :
$ export PATH=$HOME/.netbeans/6.5/javafx-sdk/bin:$PATH
$ javafx -cp HelloWorld.jar helloworld.Main
L'application dans le jar est exécutée sans aucun problème, mais cette méthodes surtout avec un chemin absolu et beaucoup d'arguments sur la ligne de commande est une source d'erreurs et un peu étrange pour les habitués de java -jar nomFichier.jar !!!
Et si on essaye de lancer le jar avec java ?
$java -jar HelloWorld.jar
Cette commande engendre des message d'erreurs, notamment "ClassNotFoundException". Le programme quitte avec le message "Could not find the main class: helloworld.Main. Program will exit".
Cette Exception est parmi les plus connues pour les développeurs Java, elle signifie normalement que la classe contenant la méthode "main" n'a pas été trouvée, soit suite à l'absence de telle classe ou si la section Main-Class dans le fichier MANIFEST.MF est absente ou mal renseignée.
Le problème ici est différent. Il suffit de jeter un œil sur le fichier
"MANIFEST.MF" et sur le contenu du jar pour constater que l'absence de la classe Main.class n'est pas à l'origine de problème.
Le fichier "MANIFEST.MF" est bien renseigné. Une nouvelle ligne est laissée à la fin du fichier.
La class « Main.class " existe et en bonne place dans le fichier .jar
La raison de messages d'erreur est tout simplement l'absence dans la CLASSPATH du chemin de bibliothèques composant le JavaFX run-time.
L'ajout du chemin vers des fichiers jar du dossier "lib" dans javafx-sdk dans la CLASSPATH, règle le problème. Il est même possible de demander à NetBeans de faire le nécessaire pour vous :)
Copiez le dossier javafx-sdk dans un dossier de votre choix
$ cp -a $HOME/.netbeans/6.5/javafx-sdk $HOME/javafx-sdk
Note :
Cette copie vous permet aussi d'utiliser JavaFX à partir de la ligne de commande.
Un clic droit sur le projet d'exemple -> Properties
Sélectionnez "Libraries" -> un clic sur "Add JAR/Folder"
A l'intérieur de javafx-sdk/lib on trouve deux dossiers
"desktop" et "share"
Sélectionnez tous les fichiers jar dans "desktop" -> OK
Répétez l'opération -> Add JAR/Folder, sélectionnez les fichier jar dans "share" -> OK
Dé-sélectionnez la case "Build Projects on Classpath"
Un clic sur "OK" pour terminer
Un clic droit sur le projet -> Clean and Build Project
C'est tout :)
Maintenant le dossier "dist" contient le fichier jar (HelloWorld.jar). Le dossier "lib" contient tous les fichier nécessaires à l'exécution du HelloWorld.jar, préparés pour vous par NetBeans. NetBeans a aussi mis à jour le fichier MANIFEST.MF pour refléter la nouvelle CLASSPATH
Essayons :
$ java -jar HelloWorld.jar
Et voilà. L'application est lancée sans aucun messages d'erreur
2 comments:
je veux un exemple d'un site web créer avec le javafx merci :)
JavaFX dans le web, c'est avant tout une interface utilisateur riche (RIA). La norme actuelle est JavaFX 2.0, mais le problème est que cette plateforme n'est pas encore supportée sur Linux :( (ce site est avant tout pour les technologies Java sur Linux).
Je vous invite donc a consulter le site officiel de JavaFX (lien plus loin) pour trouver des sites utilisant réelement JavaFX.
J'espère avoir répondu à votre question.
http://javafx.com/
Post a Comment