IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Problème lancement d'un programme en Delphi avec Java


Sujet :

Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Problème lancement d'un programme en Delphi avec Java
    Bonjour à tous.
    Je m'adresse à vous car après quelques heures d'exploration de la JavaDoc, de recherches, et de galères, je n'ai pas réussi à résoudre mon problème tout seul. Le voici :
    Je dois, parce que c'est imposé, lancer depuis un programme Java un programme codé en Delphi qui utilise pour se configurer un fichier XML.
    J'ai écrit, à l'aide de SAX, JDOM et Swing, un "outil" qui me permet de paramétrer comme je veux le fichier XML.
    Lorsque je lance le programme en Delphi depuis mon explorateur Windows, aucun problème à signaler.
    Lorsque je lance le programme en Java, j'accède au fichier XML et je parviens à le modifier.
    SAUF QUE, quand je lance le programme en Delphi depuis mon programme en Java, j'obtiens cette erreur :
    "Le chemin d'accès spécifié est introuvable. Ligne :0"

    J'ai essayé beaucoup de choses, comme ouvrir un fichier différent avec mon appli java, etc caetera, mais j'ai pas trouvé de solution miracle qui résolve mon problème.

    Une âme charitable aurait une idée d'où est-ce que j'ai merdouillé ?

    Pour information j'utilise ce code là pour lancer le programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public UIListDialog(UIKeyboardFrame keyboardFrame){
    	super();
    	try
    	{			
    	Process process=Runtime.getRuntime().exec(new String [] {"./MyProg/MyProg.exe"});
    	InputStream lire=process.getInputStream();
    	OutputStream ecrire=process.getOutputStream();
    	InputStream erreur=process.getErrorStream();	
    	}
    	catch(Exception e)
    	{
    	e.printStackTrace();
    	}			
    }
    Merci d'avance à tous

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Est-ce que dans le code qui modifie ton fichier XML, tu close() bien le fichier avant de lancer l'exe Delphi ?

    As-tu pensé au working dir ? Est-il correctement spécifié pour que l'appli Delphi puisse trouver le XML ?
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Je n'arrive pas à savoir si l'erreur que tu obtiens vient du fait que ton appli Java ne trouve pas l'exe codé en Delphi ou du fait que ton appli Delphi ne trouve pas le fichier XML.

    Essaye de lancer ton appli JAVA dans le même répertoire où se trouve ton exe Delphi au cas où...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Déjà, merci pour vos réponses, et pour l'intêret que vous portez au problème.

    sjrd:
    C'est un truc que j'ai pensé à faire oui. En tout cas, et de mémoire parce que j'ai pas le code sous les yeux ça donnait :
    - ligne d'ouverture du fichier
    - ligne de déclaration / initialisation du document
    - ligne de fermeture du fichier

    Je sais pas trop si il faut en faire plus.
    Cependant, l'essai que j'ai fait d'ouvrir un AUTRE xml que celui utilisé par le Delphi, soulève le même problème. J'ai donc du mal à croire que c'est à cause du xml que le programme en Delphi plante.

    Que veux-tu dire quand tu parles de Working dir ? Je n'ai pas accès au code source en Delphi, ou du moins pas directement.

    billynirvana :
    J'aurai sans doute du le préciser avant , mais j'ai un retour visuel qui m'indique que le programme en Java trouve bien l'exécutable en Delphi. De plus, je vois mal pourquoi le programme en Delphi trouverai le xml lorsque je double-clique dessus, et pas lorsque je le lance depuis mon programme en Java.

    J'ai lu quelque chose en cherchant mon erreur, comme quoi les chemins d'accès doivent être plutôt court, sans espace, et sans accents. Vous pensez que ça vient de là ? ( Y a quelques espaces dans mon chemin d'accès )
    J'essaye en parallèle de comprendre les différences entre le double click de mon explorateur windows et un appel à la librairie Runtime.

    Merci encore du temps que vous passez à m'aider

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour

    Je pense que j'ai "résolu" mon problème, je m'explique.

    J'ai essayé de reproduire ce qu'il se passait quand je fais appel au Runtime. J'ai tout d'abord, grâce au tuyau de sjrd, utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Runtime runtime = Runtime.getRuntime();
    String[] args = { "cmd.exe", "/C", "dir C:\\ >fichier.txt" };
    final Process process = runtime.exec(args);
    pour savoir dans quel répertoire de travail j'étais. (Puisque c'est bien ce dont il s'agit non ?)
    Ensuite, mon p'tit cmd.exe en main, j'ai lancé mon .exe depuis le répertoire de travail, et OH MIRACLE, ça plante, comme quand l'appli java lance l'exe !

    Conclusion, j'ai essayé de changer le répertoire de travail comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String[] commande = new String [] {"MyProg.exe"};
    		String[] parametres = new String[] {};
    		File changedir= new File(XMLNames.VC_PATH_EXE);
    		Process process=Runtime.getRuntime().exec(commande,parametres,changedir);
    		InputStream lire=process.getInputStream();
    		OutputStream ecrire=process.getOutputStream();
    		InputStream erreur=process.getErrorStream();
    Mais ça marche pas non plus. L'erreur, par contre, elle a changé ! C'est désormais un sublime :

    Exception EOleException dans le module MyProg.exe dans 0008E5FD. Le module spécifié est introuvable.

    Ca me sidère qu'on me donne le numéro de l'offset où il manque un truc, mais qu'on me dise pas ce qu'il manque (Ca m'aurait un peu arrangé !)

    J'ai déjà essayé de tout copier un peu partout, tel Joe-la-bidouille, pour essayer de virer cette erreur, mais que nenni.
    J'aimerai en plus garder cet aspect "propre" des deux programmes séparés, dans des répertoires parents, mais différents.

    J'ai donc pensé à feinter le bidule, ce qui résoud le problème, en passant par cmd.exe en faisant d'abord un cd, puis en lançant l'exécutable ! Seulement, malgré mes recherches, j'ai du mal à voir comment faire. J'ai pensé à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		ArrayList<String> commands = new ArrayList<String>();
    		commands.add("cmd.exe /C cd MyProg");
    		commands.add("MyProg.exe");
    		ProcessBuilder executable_ = new ProcessBuilder(commands);
    		executable_.start();
    Mais il n'aime vraisemblablement pas.

    Une idée ?

    Merci encore pour toute votre aide !

  6. #6
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    C'est un probleme de repertoire de travail.

    D'apres la javadoc :
    exec(String command, String[] envp, File dir)
    Executes the specified string command in a separate process with the specified environment and working directory.
    A mon avis, tu devrais essayer cette variante de exec...

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Attention le second paramètre de ,%20java.lang.String[],%20java.io.File%29]exec(String[],String[],File) correspond aux variable d'environnements et non pas aux arguments.

    Tu passes un environnement vide

    Essayes ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String[] commande = new String [] {"MyProg.exe"};
    File changedir= new File(XMLNames.VC_PATH_EXE);
    Process process=Runtime.getRuntime().exec(commande,null,changedir);
    @hwoarang : il est préférable d'utiliser les exec(String[])u afin de passer indépendamment chaque paramètre de la commande.
    Les commande de exec(String) seront découpé via un Tokenizer et pourrait donner des résultats inattendus dans certains cas...


    Au passage à partir de Java 5.0 il est préférable de passer par ProcessBuilder !



    Citation Envoyé par Arakasi Voir le message
    Mais ça marche pas non plus. L'erreur, par contre, elle a changé ! C'est désormais un sublime :

    Exception EOleException dans le module MyProg.exe dans 0008E5FD. Le module spécifié est introuvable.
    Ca ressemble plus à une erreur dans ton programme MyProg.exe qu'à une exception Java...
    Peut-être à cause de l'environnement vide.

    Sinon attention à la manière dont tu traites les flux d'entrées/sorties. Il faut faire cela depuis des threads séparés !


    Citation Envoyé par Arakasi Voir le message
    J'ai donc pensé à feinter le bidule, ce qui résoud le problème, en passant par cmd.exe en faisant d'abord un cd, puis en lançant l'exécutable ! !
    Cela ne changera rien car les deux commandes sont indépendantes l'une de l'autre...


    a++

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Grâce à toi, adiGuba, le problème est résolu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String[] commande = new String [] {"MyProg.exe"};
    File changedir= new File(XMLNames.VC_PATH_EXE);
    Process process=Runtime.getRuntime().exec(commande,null,changedir);
    C'est la solution que je cherchais !

    Merci infiniment à vous quatre, sjrd, billynirvana, hwoarang et adiGuba, pour l'aide apportée, et l'acceuil, très sympathique !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de lancement d'un programme utilisant jinitiator avec ie8
    Par GBAGO dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 26/05/2011, 20h32
  2. Probléme de lecture d'un fichier .txt avec java
    Par samorra dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 29/09/2009, 00h13
  3. problème d'exécution de programme sans delphi installé
    Par bouha2008 dans le forum Débuter
    Réponses: 13
    Dernier message: 09/06/2009, 16h08
  4. [Kylix] Problème au lancement d'un programme
    Par jeanbi dans le forum EDI
    Réponses: 7
    Dernier message: 19/01/2005, 23h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo