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

Langage Java Discussion :

lancer un bat avec une adresse relative


Sujet :

Langage Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Points : 295
    Points
    295
    Par défaut lancer un bat avec une adresse relative
    Je suis dans mon code java
    J'arrive sans problème à éxécuter un commande bat à l'aide
    de la classe runtime et de la fonction exec :

    String pathname = "D:\\LOCAL\\instantiation";
    File dir = new File( pathname) ;
    String temp[]={"D:\\LOCAL\\instantiation\\instantiate.bat", "-I", "-P", "admin"};
    Runtime.getRuntime().exec(temp,null,dir);

    jesouhaite passer en adresse relative ... j'ai essayé des trucs du genre

    String pathname = "..\\instantiation";
    File dir = new File( pathname) ;
    String temp[]={"..\\instantiate.bat", "-I", "-P", "admin"};
    Runtime.getRuntime().exec(temp,null,dir);

    mais ça ne marche pô

  2. #2
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    En fait, il faut faire attention au repertoire courrant qui n'est pas ou plus forcement celui d'ou a ete executé le logiciel ....

    Soit tu t'assure (et je ne sais pas comment) que tu te situe bien dans le repertoire de base, soit tu passe en chemin statique, formé a partir du chemin de base + le chemin relatif.
    Dans le ée cas, le chemin de base devra etre genere dynamiquement. Sous delphi d'ou je viens il existait une methode qui nous permetais de recuperer le nom complet du fichier d'execution, donc d'en extraire son repertoire que l'on stock dans une variable "rootpath" par exemple.
    Cette variable, transmise aux classes qui en ont besoin, permet une fois concatene aux chemins relatifs, de generer des chemins complets a des fichiers, quelque soit le repertoire d'instalation.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Points : 295
    Points
    295
    Par défaut


    ouai merci j'ai réussi à le faire ....VICTOIRE

    en gros le truc c'est que ce n'est pas possible en adresse relative ....
    il faut récupérer le path via getAbsolutePath() ou getCanonicalPath()

    voila une solution:

    String pathname = "..\\instantiation";
    File dir = new File( pathname) ;
    String path =dir.getAbsolutePath(); //dir.getCanonicalPath();
    String temp[] ={path+"\\"+"instantiate.bat", "-P", "toto", };
    Process add = Runtime.getRuntime().exec(temp,null,dir);
    add.waitFor();

  4. #4
    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,

    Citation Envoyé par LittleBean
    Process add = Runtime.getRuntime().exec(temp,null,dir);
    add.waitFor();
    Attention à ceci ! Tu devrais utiliser (ou fermer) les flux d'E/S du programme que tu lances, sinon il pourrait se bloquer (lire Runtime.exec() n'est pas des plus simple...).

    a++

  5. #5
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    String pathname = "..\\instantiation";
    Petite question :
    Ce chemin est relatif a quoi ? le repertoire d'execution ? ou au fichier java source ?

    Dans le 1e cas il faut faire attention a ce que le chemin d'exectution ne change pas ....
    on peux creer un lien vers un programme et lui attribuer un repertoire d'execution different. J'ai aussi remarque que pour une execution sous DOS, faire un "java out\monappli.jar" specifie comme repertoire d'execution le repertoire racine de "out" alors que "cd out" puis "java monappli.jar" specifie "out" comme repertoire d'execution.

    J'ai chercher a recuperer le chemin complet du fichier jar executé mais sans succes.
    Y a t il un moyen a l'execution de connaitre le chemin de la classe principale (celle qui declare main) ou bien du jar ? ou tout autre moyen de connaitre dynamiquement le repertorie de base de l'application, sans passer par une clefs de la bdr ou autre variables d'environnement renseigné a l'instalation ...
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Points : 295
    Points
    295
    Par défaut
    Attention à ceci ! Tu devrais utiliser (ou fermer) les flux d'E/S du programme que tu lances, sinon il pourrait se bloquer
    merci du conseil je vais fermer tout les flux

    pour clorish le chemin est relatif au repertoire d'execution ce qui implique effectivement que la structure ne change pas à l'intérieur du dossier de l'appli


    J'ai cherché à recuperer le chemin complet du fichier jar executé mais sans succes.
    je pense pas ... que ce soit possible

  7. #7
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par LittleBean
    pour clorish le chemin est relatif au repertoire d'execution ce qui implique effectivement que la structure ne change pas à l'intérieur du dossier de l'appli
    ok .... donc du repertoire d'execution defini par windows.
    C'est a dire que si on lance :

    c:\java>java out\monappli.jar

    le repertoire d'execution est c:\java et non c:\java\out.

    cela sous endent que si on place un racourci sur le fichier mal parametré, on ne recupere pas le repertoire racine de l'applciation ... etc.
    J'ai eu pas mal de soucis avec des "repertoires d'execution" qui changent au cours de l'execution de d'uen applciation .... notement avec les dialogs de selection de fichiers.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Points : 295
    Points
    295
    Par défaut
    oui c'est tout à fait ça ( le dossier où est executé le .bat est le dernier argument d'exec(...) )

    On est bien d'accord mais je vois pas vraiment de façon simple d'échaper à une structure de fichier/repertoire windows cohérente

  9. #9
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Bon ben vu que tu confirme ce que je pensais, ca me pose un souci :

    sous delphi, ouvrir une boite de dialogue change le repertoire actif de windows, donc ouvrir un fichier qui se trouve dans "monappli\datas\" affecte comme repertoire actif "monappli\datas".
    Du coups tous tes chemins relatifs le sont par rapport a "monappli\datas" et non "monappli".

    De plus, si le repertoire debase depends du repertoire d'execution, cela sous entends que ce dernier peut changer d'une execution a l'autre, donc rend incoherent l'usage des chemins relatifs

    Sous delphi j'ai resolu le probleme de 2 facon :
    - Definir une clafs dans la BdR ayant pour valeur le repertoire d'instalation
    - Generer mes fichier en fonction du nom complet de l'executble dont j'ai axtrait le repertoire .....

    JE prefere de loin la 2e qui permet une execution sans install ..
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

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

Discussions similaires

  1. Utiliser une adresse relative avec log4net
    Par LecatEric dans le forum C#
    Réponses: 0
    Dernier message: 15/03/2011, 14h48
  2. Lancer un fichier .bat avec une page PHP
    Par arezki76 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 09/11/2009, 09h47
  3. Lancer un .bat avec exécution depuis une IHM
    Par tanguy.L dans le forum Langage
    Réponses: 13
    Dernier message: 14/06/2009, 18h21
  4. [LG]Lecture de fichier avec une adresse internet
    Par forbin dans le forum Langage
    Réponses: 8
    Dernier message: 09/02/2005, 19h00
  5. [C#] Lancer et dialoguer avec une console ?
    Par Selenite dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/09/2004, 19h48

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