fabrice_pi
Messages postés91Date d'inscriptionvendredi 12 mars 2004StatutMembreDernière intervention 5 août 2005
-
17 août 2004 à 13:34
elwady
Messages postés2Date d'inscriptionjeudi 12 mai 2005StatutMembreDerniè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
fabrice_pi
Messages postés91Date d'inscriptionvendredi 12 mars 2004StatutMembreDerniè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
Vous n’avez pas trouvé la réponse que vous recherchez ?
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 20071 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
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 20071 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.