HenryP
Messages postés21Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 juillet 2011
-
20 juil. 2010 à 11:44
HenryP
Messages postés21Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 juillet 2011
-
24 juil. 2010 à 12:53
J'ai un problème avec la création d'un fichier Jar sous Eclipse et Windows 7.
Le petit bout de code ci-dessous fonctionne sans problème après compilation sous Eclipse.
public class EssCtr
{
public static void main(String[] args)
{
ControllerEnvironment ce = ControllerEnvironment.getDefaultEnvironment();
Controller[] cs = ce.getControllers();
if (cs.length == 0)
{
System.out.println("Aucun controleur n'a été trouvé...");
System.exit(0);
}
// Afficher le nom et le type de chaque controleur
for (int i = 0; i < cs.length; i++)
{
System.out.println(i + ". " + cs[i].getName() + ", " + cs[i].getType() );
}
JDialog.setDefaultLookAndFeelDecorated(true);
JOptionPane.showMessageDialog(null ,"Cet affichage est prévu...","Vérification",JOptionPane.ERROR_MESSAGE);
}
}
Et me fournit le résultat suivant sur la console, résultat correspondant bien à ma configuration du moment...
WARNING: Found unknown Windows version: Windows 7
Attempting to use default windows plug-in.
Loading: net.java.games.input.DirectAndRawInputEnvironmentPlugin
0. Périphérique clavier PIH, Keyboard
1. Souris HID, Mouse
2. T.Flight Stick X, Stick
3. HP USB Multimedia Keyboard, Unknown
4. HP USB Multimedia Keyboard, Unknown
5. HP USB Multimedia Keyboard, Unknown
Par contre dés que je veux "exporter" sous Eclipse vers un fichier EssCtr.jar en C:/FchJar, celui-ci est bien créé mais lors de la commande:
C:\FchJar>java -jar EssCtr.jar
J'obtiens :
Exception in thread "main" java.lang.NoClassDefFoundError: net/java/games/input/ControllerEnvironment
at paq_ess_ctr.EssCtr.main(EssCtr.java:11)
Caused by: java.lang.ClassNotFoundException: net.java.games.input.ControllerEnvironment
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
... 1 more
Ce qui semble vouloir dire que la classe net.java.games.input.ControllerEnvironment n'est pas trouvée, or celle-ci se trouve dans jinput.jar.
Dans Eclipse la structure du projet est la suivante:
Où jinput.jar a bien été mentionné comme bibliothèque référencée de même que les deux dll nécessaires.
Dans Manifest j'ai pratiquement tenté toutes les possibilités de Class-Path pour que le fichier Jar trouve jinput.jar sans succès.
Et maintenant je ne sais vraiment plus quoi faire. Merci d'avance de votre aide éventuelle.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 20 juil. 2010 à 13:37
Salut,
Erreur classique : ton fichier manifest ne doit pas être bon.
Décompresse ton jar, et ouvre le fichier manifest.mf qui se trouve dedans et regarde s'il correspond bien à celui qui est dans eclipse déjà. Si il est identique, montre nous son contenu afin de voir ce qui cloche.
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 20 juil. 2010 à 17:52
Salut,
Donc le fichier manifest du fichier jar est différent de celui d'eclipse : le fichier MANIFEST contenu à la racine de ton jar n'est pas celui qui est utilisé par java : il est là car c'est un simple export de ton arborescence de fichier de ton projet eclipse. Tu peux l'ignorer lors de la création du jar.
Par contre, le MANIFEST qui est dans le dossier META-INF est celui qui est utilisé par la jvm... et par contre celui-là n'est pas bon : pas de classpath dedans, et du coup, il ne vas pas chercher la moindre bibliothèque, d'où l'erreur que tu obtiens.
Dis à eclipse d'utiliser TON fichier MANIFEST et non de le générer automatiquement.
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Qui, à l'inversion prés, correspond bien à Eclipse, par contre à l'exécution, il me fournit le même résultat, il ne fonctionne pas. Le contenu de jinput n'est toujours pas présent donc non-exporté. Est-ce dans le Class-Path qu'il y a un problème?
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 20 juil. 2010 à 18:48
Salut,
Le contenu de jinput n'est toujours pas présent donc non-exporté.
C'est-à-dire ? Le but d'une bibliothèque, c'est d'être partagée par toutes les applications. Donc eclipse ne la met pas dans le fichier jar de ton projet. C'est à toi de fournir cette bibliothèque en même temps que le jar de ton projet (le standard veut de faire un dossier "bin" contenant le jar exécutable, et un dossier "lib" contenant les jar des bibliothèques.
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 20 juil. 2010 à 19:13
Salut,
Et bien dans le dossier contenant ton jar, tu crée un dossier "lib" dans lequel tu mets les jars ainsi que les dll des bibliothèques que tu utilises, et dans ton fichier MANIFEST tu références ces bibliothèques :
Manifest-Version: 1.0
Class-Path: lib/jinput.jar
Main-Class: paq_ess_ctr.EssCtr
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
HenryP
Messages postés21Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 juillet 2011 21 juil. 2010 à 15:43
Bonjour,
il y a du progrès...
Voici, maintenant, la structure du projet sous Eclipse:
Dans la bibliothèque "lib" il y a "jinput.jar" qui contient donc toutes les "class" nécessaires.
Ensuite, j'ai la décompression de "jinput" avec, là aussi, toutes les "class" nécessaires.
Et en dernière position les deux "dll" elles aussi nécessaires.
A noter que la décompression de "jinput" n'est pas prise en compte par Eclipse qui fonctionne bien sans.
Après "export" sous forme d'un fichier EssCtr.jar
La structure de celui-ci se présente sous la forme ci-dessous
A noter que l'arborescence "net...." est présente de même que les deux "dll".
Maintenant en ligne de commande j'ai le résultat correcte suivant:
C:\FchJar>java -jar EssCtr.jar
WARNING: Found unknown Windows version: Windows 7
Attempting to use default windows plug-in.
Loading: net.java.games.input.DirectAndRawInputEnvironmentPlugin
0. PÚriphÚrique clavier PIH, Keyboard
1. Souris HID, Mouse
2. T.Flight Stick X, Stick
3. HP USB Multimedia Keyboard, Unknown
4. HP USB Multimedia Keyboard, Unknown
5. HP USB Multimedia Keyboard, Unknown
De même que j'ai bien l'affichage du popup ci-dessous que j'avais prévu.
Donc, tout semble bon, mais il y a encore un hic, c'est que deux clics sur le nom du fichier "EssCtr.jar" ne produisent aucun effet (aucun affichage de popup). Ce qui semble vouloir dire que Windows, quant à lui, n'est pas tout a fait d'accord.
Merci pour l'efficacité de ton aide et excuse-moi d'en abuser...
HenryP
Messages postés21Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 juillet 2011 21 juil. 2010 à 17:27
Pour le double-clic, je n'ai effectivement aucun message, aucune fenêtre, en fait rien , absolument rien. Ce double-clic fonctionne pour d'autres essais ne comportant ni bibliothèque externe ni fichiers dll.
Sous Windows, j'ai vérifié le choix des programmes par défaut en fonction des extensions
Extension........Description.............Paramètre par défaut actuel
.jar.............Executable jar file.....Java(TM) platform SE Binary
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 21 juil. 2010 à 17:34
Salut,
Exécute le par la console windows pour voir l'exception qui se déclenche (sûrement un problème avec le classpath).
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 21 juil. 2010 à 18:25
Salut,
Pour les multiples installations, c'est sûrement dû à une double installation (une version 64 bits et une version 32 bits, ou alors une mise à jour automatique de java).
Là je n'ai pas trop d'idées, si ca se lance correctement dans la console et pas en double cliquant dessus. essaye en faisant un raccourci, et en précisant bien la cible du lien pour qu'il s'exécute dans le répertoire contenant le jar pour voir.
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
HenryP
Messages postés21Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 juillet 2011 21 juil. 2010 à 19:49
Je m'excuse, j'ai tout faux. En fait cela ne fonctionne pas non plus. Bien que les deux dll apparaissent dans EssCtr.jar, elles ne participent pas au fonctionnement. En effet, J'avais oublié que ces deux dll étaient déjà dans mon répertoire FchJar. En mettant EssCtr.jar, tout seul, dans un répertoire, il ne fonctionne pas tant que je n'ai pas mis les deux dll dans ce nouveau répertoire.
Décidément, cela m'a l'air d'être un sacré problème...
Bonsoir
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 21 juil. 2010 à 20:32
Salut,
Attends, quel est le contenu de ton jar exactement et le contenu du dossier dans lequel est ton jar ?
Ton jar ne dois contenir que les classes compilées de ton projet : les jars et dll utilisées par ton projet ne doivent pas être contenues dans ton jar mais mises "à côté" dans un dossier "lib" par exemple, et paramétrer ton fichier manifest afin qu'il fasse référence aux jars utilisés dans le classpath.
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
HenryP
Messages postés21Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 juillet 2011 22 juil. 2010 à 20:28
Bonsoir,
Je viens de passer une partie de la journée sur mon problème sans résultat positif. Finalement, je commence à me demander si ce petit programme (une vingtaine lignes de code) qui fonctionne bien sous Eclipse, peut être "exporté" sous forme de fichier.jar.
Je pense, par ailleurs, que si cela était si simple, j'aurais bien trouvé sur le web un exemple s'y rapprochant.
Sur les trois forums où j'ai posé le problème, tu as bien été le seul à faire avancer les choses.
Une question cependant, as-tu essayé de faire tourner ce programme?
Merci encore de ton aide.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 23 juil. 2010 à 09:44
Salut,
Bien sûr que c'est possible à exporter vers un jar : tout ce qui marche sous eclipse doit marcher au format jar, là n'est pas le problème.
Je n'ai pas essayé de faire tourné ton programme : j'ai un emploi du temps assez chargé ces derniers temps, ca devrait un peu se calmer la semaine prochaine j'espère.
Le problème principal dans ton cas c'est l'utilisation de dll (vraiment pas pratique d'utiliser des bibliothèques avec des dépendances natives en java !).
Pour résumer, il faut que tu génères un jar contenant les classes compilées de ton projet (et uniquement les classes compilées : pas de fichier jar ou de dll dedans, ca ne sert à rien vu que la jvm ne les exploitera pas).
Il faut que tu crées un dossier "lib" dans le dossier contenant ton jar (c'est pas obligatoire, mais plus pratique).
Tu copie dans ce dossier lib les jars et dll dont dépend ton projet.
Tu références dans ton fichier MANIFEST les jars dont dépend ton projet (en lui disant d'aller les chercher dans le dossier lib, ca doit ressembler à un truc du genre : "Class-Path: lib/jinput.jar")
Si après tout cà ca ne marche toujours pas, essaye en ajoutant le répertoire "lib" dans la variable d'environnement PATH de ton OS (étant donné qu'il s'agit de dll native, peut-être que la jvm a du mal à trouver l'emplacement de ces dll et passe par le système pour qu'il les lui délivre).
Là en théorie après tout çà, ça devrait marcher.
______________________________________
AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
HenryP
Messages postés21Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 juillet 2011 24 juil. 2010 à 12:53
Bonjour,
J'ai suivi tes conseils et j'ai crée un nouveau répertoire c:/Fj. Du coté du fichier EssCtr.jar, je l'ai particulièrement élagué.
J'ai essayé de relancé le tout, à partir de la console, sans succès...
J'ai ensuite suivi ton dernier conseil et j'ai mentionné dans le Path des variables d'environnement le nouveau répertoire.
Et maintenant, ça fonctionne sans problème au niveau de la console mais toujours rien au niveau d'un double-clic.
Ainsi, ton dernier conseil a pas mal fait avancer les choses. Par contre, je me pose la question, cette modification du Path est une obligation au bon fonctionnement et cette mini-application n'est donc pas exécutable sur une autre machine tant que son Path n'a pas été modifié.