java.net member

Rechercher dans ce site

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:

Anonymous,  July 15, 2011 at 11:36 AM  

je veux un exemple d'un site web créer avec le javafx merci :)

okjavafx July 15, 2011 at 2:02 PM  

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

  © Blogger template Simple n' Sweet by Ourblogtemplates.com 2009

Back to TOP