Lancer java à partir d'un programme C

Résolu
fabrice_pi Messages postés 91 Date d'inscription vendredi 12 mars 2004 Statut Membre Dernière intervention 5 août 2005 - 17 août 2004 à 13:34
elwady Messages postés 2 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 6 juillet 2005 - 6 juil. 2005 à 10:46
Salut,

Tout est dans le titre ! Ou presque... Je suis sous windows et je cherche à lancer un programme java (graphique) à partir d'un exécutable (C compilé). J'ai fait tout ça, mais le problème que est qu'il y a en permanence une fenêtre dos (cmd.exe) derrière le programme java.
Je fait l'appel dans mon programme C avec la fonction system(). Malheureusement j'ai appris que cette fonction lance forcement cmd.exe. J'ai essayé aussi avec exclp() mais dans ce cas j'ai une belle erreur windows !
Est-ce que quelqu'un a une idée ?
Fabrice

28 réponses

CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
4 sept. 2004 à 13:34
Pourquoi n'utilises-tu pas JNI (Java Native Interface) au lieu de la fonction système?

Core Breaker :)
0
fabrice_pi Messages postés 91 Date d'inscription vendredi 12 mars 2004 Statut Membre Dernière intervention 5 août 2005
4 sept. 2004 à 13:50
Ben parce que la JNI ne le permet pas tout simplement ! J'ai pas le temps d'expliquer pourquoi, pour plus d'info lire la javadoc sur la JNI
Fabrice
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
4 sept. 2004 à 15:03
Alors dis moi pourquoi j'y suis arrivé plusieurs fois et pourquoi le programme java.exe y arrive !!

Core Breaker :)
0
fabrice_pi Messages postés 91 Date d'inscription vendredi 12 mars 2004 Statut Membre Dernière intervention 5 août 2005
4 sept. 2004 à 15:14
on ne peut pas appeler java à partir du C directement, il faut d'abord lancer la machine virtuelle. Une fois la machine virtuelle lancée et connue du programme C (il doit connaitre la bonne machine virtuel JNIEnv) alors les échanges peuvent être effectués sans problèmes dans les 2 sens.
Si tu arrives à appeler une classe java à partir d'un executable C (le main dans le .c), je demande à voir...

Fabrice
0

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

Posez votre question
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
4 sept. 2004 à 20:49
Effectivement, le main du .c instancie une machine virtuelle car c'est elle qui va charger une classe java en mémoire par son loader, il n'y a pas d'autre moyen de lancer un prog java, même JPython instancie une machine virtuelle. Si tu veux exécuter un prog java directement sans machine virtuelle, tu dois toi même programmer une machine virtuelle JAVA car un fichier .class contient du byte code qui n'est pas directment exécutable par un processeur de PC.
Même ton idée de départ, c'est à dire lancer un processus JAVA, devra instancier un machine virtuelle JAVA

JNI propose des fonctions pour instancier une machine virtuelle et donc fabriquer un JNIEnv, c'est comme ça que j'ai fait et java.exe fais. Si tu lance un processus JAVA, c'est donc comme ça qu'on fait, c'est le seul moyen d'exécuter un programme java.

Je n'ai pas besoin pour le programme de connaitre la machine virtuelle, il en crée une nouvelle, comme si tu lancais un 2ème processus JAVA.EXE

Core Breaker :)
0
fabrice_pi Messages postés 91 Date d'inscription vendredi 12 mars 2004 Statut Membre Dernière intervention 5 août 2005
5 sept. 2004 à 10:28
ok, ça me va. Mais t'as un exemple de création de machine virtuelle par un programme C ? Ou une doc ? Merci
Fabrice
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
6 sept. 2004 à 01:48
JNI Propose une fonction JNI_CreateJavaVM pour créer une instance de JVM, de plus dans le src.jar du JDK, il y a un java.c qui est le source de JAVA.EXE, qui l'utilise.

sinon, je posterai ici un tel exemple pour ceux que ça intéresse
je dois retrouver mais anciennes archives, car ça fait longtemps que je l'ai fait.

Core Breaker :)
0
elwady Messages postés 2 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 6 juillet 2005
6 juil. 2005 à 10:46
le C est portable
bonjour les degats !!!
0
Rejoignez-nous