7
votes

Comment appeler la fonctionnalité C ++ de Java

J'ai un programme Java qui est principalement une interface graphique et cela affiche des données écrites dans un fichier XML à partir d'un outil de ligne de commande C ++. Maintenant, je veux ajouter un bouton au programme Java pour actualiser les données. Cela signifie que mon programme doit appeler la fonctionnalité C ++.

est le meilleur moyen d'appeler le programme de Java via un appel système? Le programme C ++ sera compilé pour Mac OS et Windows et doit toujours être dans le même répertoire que le programme Java.

Je voudrais générer un exécutable que le programme C peut être stocké à l'intérieur du pot et appelé de mon programme?


0 commentaires

4 Réponses :


6
votes

Si vous avez accès au code et que vous souhaitez une expérience «interactive» avec le programme externe (par exemple, appelez, obtenez des résultats, effectuez des appels supplémentaires), recherchez JNI, qui vous permet d'appeler C ou C ++ Code d'un Java Application en incluant et en liant Jni Juice sur votre application C ou C ++ avec.

Voir:

http://fr.wikipedia.org/wiki/java_native_interface

http://www.acm.org/crossroads/xrds4-2/ jni.html

Si vous avez vraiment besoin d'une solution de solution «lancement et d'obtenir des résultats», consultez Runtime.Exec (), qui vous permet de lancer un programme externe et de capturer sa sortie.

Voir: http://www.javaworld.com /javaworld/jw-12-2000/jw-1229-Traps.html?page=1

http://www.rgagnon.com/javadétails/java-0014.html < / a>


0 commentaires

5
votes

Assumer aucune meilleure méthode de communication n'est disponible (savon, glace, sockets, etc.), j'appellerais l'exécutable à l'aide de runtime.exec () . JNI peut être utilisé pour interfacer directement, mais je ne le recommanderais pas. Non, vous ne pouvez pas mettre un exécutable dans le pot. Eh bien, vous pouvez, mais vous ne pouvez pas l'exécuter, puisque la coquille ne sait pas comment l'exécuter.


3 commentaires

Quel est le problème avec Jni? C'est là pour une raison, et c'est vraiment beaucoup mieux performant que de commencer un processus distinct.


Le problème avec JNI est que si vous faites une erreur, votre JVM est susceptible de crash. Comme dans "Segfault: code largué".


@Pavel: couplage moins portable, moins stable et plus serré




2
votes

Pour répondre à votre dernière question, vous ne pouvez pas exécuter un exécutable de votre pot.

Cependant, vous pouvez le stocker dans votre pot et l'extraire dans un répertoire / fichier temporaire avant de l'exécuter (vérifiez sa présence la première fois et extraire si nécessaire). Cela simplifiera quelque peu votre distribution, en ce que vous n'avez que le bocal à distribuer et vous garantira que vous exécutez une exécutable qui correspond à votre code Java Jarred.


1 commentaires

J'ai fait quelque chose de similaire à celui-ci une fois. Travaillé bien, mais je ne suis pas sûr que cela serait difficile si vous programmez nécessaire pour travailler sur différentes plates-formes.