échange des données entre une application java et une C++
Fermé
manel1989
Messages postés
10
Date d'inscription
dimanche 15 septembre 2013
Statut
Membre
Dernière intervention
3 novembre 2014
-
15 sept. 2013 à 19:31
manel1989 - 20 sept. 2013 à 18:56
manel1989 - 20 sept. 2013 à 18:56
A voir également:
- échange des données entre une application java et une C++
- Waptrick java football - Télécharger - Jeux vidéo
- Application mobile - Guide
- Jeux java itel football - Télécharger - Jeux vidéo
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Application java - Télécharger - Langages
1 réponse
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
Modifié par KX le 15/09/2013 à 20:27
Modifié par KX le 15/09/2013 à 20:27
Il n'est pas nécessaire de passer par un fichier .bat pour cela, tu peux directement appeler ton .exe avec la commande exec.
De plus je ne pense pas qu'il soit nécessaire de retourner le Process, à part peut-être pour arrêter son fonctionnement, mais dans ce cas il faut aussi penser à fermer les Thread, donc il faut aussi retourner les deux threads...
Voici un code remanié :
De plus je ne pense pas qu'il soit nécessaire de retourner le Process, à part peut-être pour arrêter son fonctionnement, mais dans ce cas il faut aussi penser à fermer les Thread, donc il faut aussi retourner les deux threads...
Voici un code remanié :
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.Scanner;
class Program
{
private final Process proc;
private final Thread out, err;
public Program(String[] cmd, String[] envp, File dir, PrintStream pOut, String formatOut, PrintStream pErr, String formatErr) throws IOException
{
proc = Runtime.getRuntime().exec(cmd, envp, dir);
out = new Transfert(proc.getInputStream(), pOut, formatOut);
err = new Transfert(proc.getErrorStream(), pErr, formatErr);
out.start();
err.start();
}
public void kill()
{
out.interrupt();
err.interrupt();
proc.destroy();
}
}
class Transfert extends Thread
{
private final InputStream in;
private final PrintStream out;
private final String format;
public Transfert(InputStream in, PrintStream out, String format)
{
this.in = in;
this.out = out;
this.format = format;
}
@Override
public void run()
{
Scanner sc = new Scanner(in);
while (sc.hasNextLine())
{
if (isInterrupted())
break;
out.printf(format, sc.nextLine());
}
sc.close();
}
}
public class Test
{
public static void main(String[] args) throws Exception
{
Program prg = new Program(new String[] {"readxmlresou.exe"}, null, new File("C:/Users/abdelhalim/Desktop/"), System.out, "lineOut=%s\n", System.err, "lineErr=%s\n");
}
}
15 sept. 2013 à 22:22
j'ai vraiment essayé avec ce code mais le probème persiste , pas d'affichage de données se trouvant sur le console de c++ sur le console java :((((((((((((, mais pour que je puisse ouvrir readxmlresou.exe il me fallait utiliser un fichier .bat parce sinon avec seulment le code que vous m'avez donné le console ne s'ouvre pas ......
j'ai meme essayé une autre apllication telque le notepad , mais le mem résultat pas d'affichage
avez vous une idée sur ça ?????
Merci énormément
16 sept. 2013 à 00:13
J'ai adapté le code de tout à l'heure pour intégrer le clavier, j'en ai profité pour enlever deux ou trois trucs pas vraiment utiles, tu les remettras si tu en as vraiment besoin.
Voici le code C++ avec lequel j'ai testé.
Remarque : il y a un petit bug, le thread clavier attend une entrée supplémentaire à la fin du programme et plante quand il l'a enfin reçu...
16 sept. 2013 à 02:07
mon programme ne reçoi rien du programme javva , just le programme java fait un apple au programme c++ et reçoi le résultat de l'exécution,, apparament je fais un erreur , voici les étapes que j'ai fais pour tourner votre code :
1_ créer un nouveau projet dans java dont le nom est : Program
2_ ////////////////////////////////////////////////////////////////////////////////////////////: Test
3_ j'ai copier coller votre code dans ces 2 classes
4 - créer u nouveau projet dans vs2010c++ appelé abs et j'ai fait copie coller de votre code
5_ j'exécute le code dans java
le résultat obteu : pas d'erreur et pas d'affichage aussi , apparament il me manque quelque chose ici ????
Qu'est ce que vous croyez ????????
Modifié par KX le 16/09/2013 à 07:48
1) Tu créé un nouveau projet C++ appelé Division par exemple, tu copies-colles le code, tu compiles, et tu mets le fichier .exe par exemple sur C:\Division.exe
2) Tu crées un nouveau fichier Test.java et tu fais un copier-coller en une seule fois de tout mon code dans ce fichier (les import, la classe Program, la classe Transfert, la classe Test)
3) Si ton programme C++ ne s'appelle pas Division ou s'il n'est pas dans C:\ tu modifies le code de la méthode main en remplaçant "C:/Division.exe" par la bonne valeur.
4) Tu compiles et tu exécutes la classe Test
Remarque : tu peux passer la partie 1 et directement mettre le chemin d'accès à ton programme "readxmlresou.exe" lors de la modification du main dans la partie 3...
20 sept. 2013 à 15:59
Malgré , j'ai fais exactement tous ce que vous avez dis mais aucun resultat !!! normalement, lorsque j'exécute la console de c++ s'ouvre mais rien ne s'affiche ??????? j'ai essayé de faire tous ce que vous m'avez dis pas à pas mais je ne sais pas où est l'erreur .
j'ai cherché sur google et j'ai trouvé le JNI.Pourais je avec le JNI faire l'accée à mon code C++ ??
honnetement je sais pas comment faire ???
Qu'est ce que vous croyez????
Merci beaucoup