JMF Jar exécutable avec Eclipse

Résolu
cs_math11 Messages postés 47 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 mai 2012 - 12 mars 2012 à 18:45
cs_math11 Messages postés 47 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 mai 2012 - 11 avril 2012 à 11:40
Salut tout le monde,

Pour mon projet actuel, j'utilise les librairies JMF 2.1.1, le programme tourne sans problème sur mon ordinateur personnel, mais je souhaiterais le distribuer à des amis qui sont intéressés.

Sous Eclipse 3.5.2, comment puis-je exporter un .jar exécutable avec les librairies JMF?

Les jars de JMF ont étés ajoutés dans le projet par : properties - java build path - add external jars.

J'ai déjà essayé l'option "Runnable JAR file", cette méthode ne fonctionne pas puisque quand je change d'ordinateur, en cliquent sur l’icône, il lance bien le processus "javaw.exe" mais rien ne s'affiche à l'écran.

D'où ma question, comment exporter un jar exécutable sous Eclipse pour toutes les machines windows? Quelle est la marche à suivre?

Merci d'avance,

Math11

40 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
15 mars 2012 à 16:42
Tu peux toujours accéder à la ressource avec getClass().getRessource() et là, tu fais ce que tu veux de l'image..
0
cs_math11 Messages postés 47 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 mai 2012
15 mars 2012 à 17:17
re:

finalement, j'ai décidé de supprimer l'icône, car je préfère un programme qui tourne sans icône que rien du tout.

D'ailleurs, le fait de supprimer l'icône n'a en aucun cas amélioré la situation...

merci

math11
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 mars 2012 à 08:39
Tu utilises une base de données ? Tu appelles des fichiers avec un chemin relatif ? C'est forcément un truc du genre.
0
cs_math11 Messages postés 47 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 mai 2012
16 mars 2012 à 14:25
salut,

Dans le genre chemin relatif, la seule possibilité serait le JFileChooser que j'utilise comme ceci, j'ai fait une fonction qui est ensuite appelée dans le main :

public static void choose(){	
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setCurrentDirectory(new File("/"));
chooser.changeToParentDirectory();
chooser.showOpenDialog(null);			
String word = chooser.getSelectedFile().getAbsolutePath();
String word2 = word.replaceAll("\\\", "\\\\\\\"); 
String test = word2+destination;
destination = test;
}


voici le bout de code du main qui appel la fonction "choose":

JMenuItem Dossier = new JMenuItem("Dossier");
        Dossier.setAccelerator(KeyStroke.getKeyStroke("F1"));
        //ajout des menu a la barre
        barre.add(menu);
        //ajout des éléments aux menus
        menu.add(Dossier);
        //ajout des écouteurs
        Dossier.addActionListener(new ActionListener() {
        	
public void actionPerformed(ActionEvent arg0) 
{ 
choose();
}


mais sinon, je n'appelle ni base de données ni fichier externe.

La fonction "choose" se lance lorsque l'on appuie sur le bouton "dossier" dans la barre de menu. Elle permet à l'utilisateur de choisir le dossier où enregistrer la photo une fois qu'elle à été prise sur le flux de la caméra.

Merci

math11
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 mars 2012 à 20:39
Non, ca ne peut pas être ca, tu ne l'appelles qua dans un actionListener, ton programme serait lancé correctement.

Tu compiles bien dans la bonne version de la JVM ? Eclipse a parfois plusieurs versions de JDK.
0
cs_math11 Messages postés 47 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 mai 2012
20 mars 2012 à 22:56
salut Julien39,

désolé pour ce retard, mais ayant peu accéder a une autre machine, en lançant le programme depuis la ligne de commande avec redirection des erreur dans le fichier texte, voici l'erreur que j’obtiens:


Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/CaptureDeviceManager
at SwingCapture.(SwingCapture.java:60)
at SwingCapture.main(SwingCapture.java:111)
Caused by: java.lang.ClassNotFoundException: javax.media.CaptureDeviceManager
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 2 more




merci encore

math11
0
cs_math11 Messages postés 47 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 mai 2012
20 mars 2012 à 23:19
re:salut,

désolé pour le précédent post, j'avais oublié quelque chose dans le path, voici, ici de la même manipulation, le nouveau fichier "trace":


Exception in thread "VFW Request Thread" java.lang.UnsatisfiedLinkError: JMFSecurityManager: java.lang.UnsatisfiedLinkError: no jmvfw in java.library.path
at com.sun.media.JMFSecurityManager.loadLibrary(JMFSecurityManager.java:206)
at com.sun.media.protocol.vfw.VFWCapture.<clinit>(VFWCapture.java:19)
at com.sun.media.protocol.vfw.VFWSourceStream.doConnect(VFWSourceStream.java:241)
at com.sun.media.protocol.vfw.VFWSourceStream.run(VFWSourceStream.java:763)
at java.lang.Thread.run(Unknown Source)




l'erreur à l'air d'être au niveau du "jmvfw.dll", alors qu'il est bien exporté dans le jar final


merci

math11
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
21 mars 2012 à 08:21
Bonjour,

Alors, JMF est bel est bien ajouté dans ton package, sinon tu aurais un ClassNotFoundEsception.

Sur le site d'oracle, on peut lire :

Thrown if the Java Virtual Machine cannot find an appropriate native-language definition of a method declared native


Je ne void pas ton code mais tu dois charger une librairie qui n'est pas dans ton path à l'aide de la méthode loadLibrary, sans doute jmvfw.

Il ne suffit pas que jmvfw soit dans le jar final, il faut que jmvfw soit dans le classpath du jar final. Ou as tu placé cette dll ?
0
cs_math11 Messages postés 47 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 mai 2012
21 mars 2012 à 10:23
salut,

merci pour ta réponse.

la "jmvfw.dll" se trouve dans le dossier "src" du projet eclipse.

comment ajouter la dll dans le classpath, car si je fait comme pour un .jar, (click droit sur le projet, bouton "properties", bouton "Java Build Path", onglet librairie, bouton "Add external jars" et choix des éléments : jmvfw.dll ).

A ce moment là, lorsque j'exporte le projet, j'ai le problème suivant: "error in opening zip file"

merci encore


math11
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
21 mars 2012 à 10:49
Bonjour,

C'est assez complexe a réaliser, je n'avais jamais fait cela et j'ai l'impression que c'est ce que tu essayes de faire avec la méthode loadLibrary.

Je ne sais pas comment tu accède à la dll mais je dirais que tu l'appelles par son nom loadLibrary("jmvfw.dll"); et étant donné qu'elle n'est pas dans le classpath, ca ne peut pas fonctionner.

Il faudrait que tu teste en lui donnant un chemin absolu et que tu surcharges cette propriété lors de l'appel de ton java. Tu peux créer un .bat qui appelle la commande java que tu as créé et utiliser -D pour surcharger les valeurs des properties.

Regarde ce tutoriel : http://www.rgagnon.com/javadetails/java-0318.html

Le problème vient du fait que les dll c'est une chose qui est propre à windows et que les programmes java sont généralement indépendants de l'os, ils ne proposent donc pas d'outils qui sont parfaitement adaptés à la gestion des DLL.
0
cs_math11 Messages postés 47 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 mai 2012
21 mars 2012 à 15:07
salut,

merci pour le tutoriel, mais je n'ai pas accès au code du jmf dans lequel se trouve le loadLibrary("jmvfw.dll").

Il semblerais qu'il faille aussi ajouter le jmf.properties au classpath. Mais comment peut on ajouter ces fichiers dans le classpath: "jmvfw.dll" & "jmf.properties" alors que ce ne sont pas des jars?

Merci encore

math11
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
21 mars 2012 à 15:36
Dans ce cas, il faut que tu les ajoutes au classpath en le modifiant manuelement :

SET CLASSPATH=%CLASSPATH%;C:\Dossier\jmvfw.dll
java -jar ...

Là, ca devrait fonctionner.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
21 mars 2012 à 15:37
Décidément ton problème est tenace !!
0
cs_math11 Messages postés 47 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 mai 2012
23 mars 2012 à 18:03
salut,

encore merci pour ton aide, mais ta dernière solution n'a pas réussi à résoudre mon problème...

math11
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
23 mars 2012 à 21:08
Je suis désolé mais j'ai épuisé toutes mes idées

Bon courage, si tu trouves la solution, je serais assez curieux de savoir comment tu t'en es sorti.

a+
0
cs_math11 Messages postés 47 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 mai 2012
24 mars 2012 à 17:43
salut,

désolé de te déranger encore, mais j'ai peut être une idée:

dans ma méthode main, puis-je charger les librairies depuis un dossier dans le jar : "ressources" par exemple comme ceci:

System.load("/ressources/jmvfw.dll");


Le problème est que j'ai l'erreur suivante:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: /ressources/jmvfw.dll


D'où ma question, comment indiquer un chemin absolu depuis le fichier jar en cours d'exécution?

voici arborescence du fichier jar:

fichier.jar
|-ressources
| |-jmvfw.dll

math11
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
25 mars 2012 à 18:33
Il ne faut pas que le fichier soit inclus dans le jar, sinon, tu n'as aucun moyen de récupérer son chemin absolu.

Créé le à un endroit spécifique et appelle le par son chemin absolu. Passes éventuelement ce chemin dans un fichier .properties.
0
cs_math11 Messages postés 47 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 mai 2012
29 mars 2012 à 16:41
salut Julien39,

Je crois que j'ai partiellement résolu le problème.

Pour ce faire j'ai utilisé Launch4j, il crée un lanceur pour en .exe pour l'application .jar avec les différentes librairies.

Subsiste 2 problèmes:

1. sur windows 7 prof 64 bits, lors de l'exécution : " Can't load IA 32-bit .dll on a AMD 64-bit platform"
2. lors de la distribution sur d'autres machines, comment indiquer au code java (system.load("")) la source de la dll. Actuellement, j'utilise le code suivant :
System.load("C:\\Users\\math\\Desktop\\essai\\jmvfw.dll");


Merci encore pour ton aide


math11
0
cs_math11 Messages postés 47 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 mai 2012
5 avril 2012 à 13:44
Salut,

Bon, mon problème est quasiment résolu.

Pour ce faire utiliser le programme "Inno Setup", renseigner les différents champs et spécifier le fichier spécifique, dans ce cas, "jmvfw.dll".

Le seul souci qui persiste, c'est comment dans le code java récupérer le chemin du dossier de destination que la personne à choisi lors de l'installation pour appeler le fichier "jmfvw.dll" à l'aide de l'instruction
System.load();


merci

math11
0
cs_math11 Messages postés 47 Date d'inscription mardi 9 août 2005 Statut Membre Dernière intervention 31 mai 2012
11 avril 2012 à 11:40
Salut,

le projet étant actuellement terminé avec succès, je clos le sujet sur le forum...

math11
-2
Rejoignez-nous