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 :

[Runtime] Lancer (et utiliser) un éditeur de texte


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    août 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2004
    Messages : 8
    Points : 5
    Points
    5
    Par défaut [Runtime] Lancer (et utiliser) un éditeur de texte
    Bonjour à tous,

    Je cherche une solution pour lancer vi (ou eventuellement un autre éditeur de texte) de manière à modifier un fichier et utiliser ce fichier dans la suite de mon appli.

    Voici le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        Runtime runtime = Runtime.getRuntime();
        Process process;
        String[] cmd = new String[2];
        cmd[0] = "vi";
        cmd[1] = "message.tmp";
        try{
            process = runtime.exec(cmd);
            System.out.println("processus lancé");
            process.waitFor();
        }catch(Exception exc){
          System.out.println("ouverture du processus impossible");
            throw new RuntimeException("Ouverture du processus impossible");
        }
    Apparemment le code "fonctionne" puisque j'ai un processus vi qui se lance, mais je n'ai pas l'interface, en fait mon programme se bloque jusqu'à ce que je fasse Ctrl-C, ce qui a pour effet de fermer mon programme et de fermer le processus vi.

    Il y sûrement quelque chose que je fais mal et/ou que je n'ai pas compris...

    Quelqu'un peut m'aider?

    D'avance merci

    Coeurgan

  2. #2
    Membre expert
    Avatar de Janitrix
    Inscrit en
    octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : octobre 2005
    Messages : 3 391
    Points : 3 399
    Points
    3 399
    Par défaut
    Tu veux modifier manuellement le fichier ou a partir de ton programme Java ?
    Car si tu veux le faire automatiquement, inutle de passer par une inferface graphique d'un éditeur de texte, modifie directement le fichier !
    Pour ton code, sache qu'a moins d'avoir un fichier 'vi.exe' dans le même dossier que ton application Java, il te faut donner le chemin complet !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmd[0] = "C:\\Program\vi.exe";
    A quoi te sert le "message.tmp" ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    août 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2004
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup de ton aide.

    Je voudrais modifier manuellement le fichier. Comme par exemple dans SVN (CVS aussi je crois?) il te propose un éditeur pour taper tes commentaires quand tu fais un commit.

    Pour ce qui est du chemin complet, je vais essayer mais apparemment le processus se lance donc il trouve le bon chemin.

    Et message.tmp c'est le fichier que je dois modifier. J'avais aussi essayé directement cmd[0]="vi message.tmp" mais ça fait la même chose.

    Sinon je suis sous linux, je ne sais pas si ça peut changer quelque chose mais c'est pas impossible.

    Je continue à chercher en tous cas.

  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 015
    Points
    23 015
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il faut utiliser les méthodes getOutputStream(), getInputStream() et getErrorStream() de ton Process afin de pouvoir manipuler les stdin, stdout et stderr du programme lancé (il ne sont pas associé au clavier/console puisque c'est ton programme).

    Et il faut faire attention au interblocage (lire stdout et stderr depuis des threads séparé)...

    Tu trouveras plus de détail sur le forum (plusieurs sujet existant).

    a++

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    août 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2004
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci de cette précision adiGuba, j'ai trouvé un exemple là : http://www.developpez.net/forums/showthread.php?t=52771

    Je n'ai pas le temps de tester tout de suite, mais je vous tiens au courant. Tout ça me semble bien compliqué quand même pour pas grand chose... Mais bon je me coucherai moins bête.

    ++

  6. #6
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Si tu arrives à lancer vi depuis java ça m'intéresse ( du moins le vrai vi sous unix, pas une adaptation windaube à la mors-moi le noeud ).
    Sachant que tu ne controles que le flux de sortie et le flux d'entrée, il doit falloir recoder une partie de l'interface graphique ( interface caractère plutot ) de vi lorsque tu lances ça en mode console ?
    Pour exemple, j'utilise des commandes vi en mode batch, mais pour l'avoir en temps réel ... ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    vi <<EOF!
       :1,$s/toto/titi/g
       !wq
    EOF!
    PS c'est un exemple bidon, je fais pas exactement ça en réel

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    août 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2004
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bon alors voici le code auquel je parviens :

    Ne faites pas attention à la gestion des exceptions je suis un gros fainéant qui corrigera ça plus tard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
      public void edit(String fileName){
        String[] cmd = {"vi",fileName};
        final Process proc;
        try{
    	      proc = Runtime.getRuntime().exec(cmd);
     
    	    new Thread() {
    	      public void run() {
    		try {
    		  BufferedInputStream errStream = new BufferedInputStream(proc.getErrorStream());
    		  byte[] buffer = new byte[128];
    		  int read;
    		  while ((read = errStream.read(buffer, 0, buffer.length)) != -1) {
    		    System.err.write(buffer, 0, read);
    		  }
    		  errStream.close();
    		 } catch (IOException ioe) {
    		    ioe.printStackTrace();
    		  }
    		}
    	    }.start();
     
    	    new Thread() {
    	      public void run() {
    		try {
    		  BufferedInputStream outStream = new BufferedInputStream(proc.getInputStream());
    		  byte[] buffer = new byte[128];
    		  int read;
    		  while ((read = outStream.read(buffer, 0, buffer.length)) != -1) {
    		    System.out.write(buffer, 0, read);
    		  }
    		  outStream.close();
    		} catch (IOException ioe) {
    		  ioe.printStackTrace();
    		}
    	      }
    	    }.start();
     
     
    	    new Thread() {
    	      public void run() {
    		try {
    		  BufferedInputStream input = new BufferedInputStream(System.in);
    		  BufferedOutputStream inpStream = new BufferedOutputStream(proc.getOutputStream());
    		  byte[] buffer = new byte[256];
    		  int read;
     
    		  while ((read = input.read(buffer, 0, buffer.length)) != -1) {
    		    inpStream.write(buffer, 0, read);
    		  }
    		  input.close();
    		} catch (IOException ioe) {
    		  ioe.printStackTrace();
    		}
     
    	      }
    	    }.start();
     
    	    try{
    	      int status = proc.waitFor();
    	      //inpFile.close();
    	    }catch(Exception e){
    	      e.printStackTrace();
    	    }
        } catch (IOException ioe) {
          ioe.printStackTrace();
        }
    }
    Malheureusement ça ne fonctionne toujours pas. J'ai bien l'affichage de vi avec le contenu de mon fichier , mais tout ce que je frappe est passe sur la console et "écrase" vi. Je ne peux pas le commander. Je manque un peu de temps pour tout tester mais je me demande si c'est vraiment faisable finalement.

    Si quelqu'un a une idée je lui serait bien sûr reconnaissant, mais sinon je continuerai à chercher tout seul mais probablement pas aujourd'hui.

    Coeurgan

Discussions similaires

  1. Utiliser l'éditeur de texte Scite avec R
    Par Jasmine80 dans le forum R
    Réponses: 4
    Dernier message: 28/05/2015, 13h02
  2. Choix éditeur de texte utilisable depuis une clé usb
    Par capone dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 09/07/2008, 16h17
  3. Quel éditeur de text utiliser pour un forum ?
    Par cuisto44000 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/07/2008, 01h07
  4. Réponses: 1
    Dernier message: 06/12/2007, 12h13
  5. Utilisation d'éditeur de texte en ligne
    Par louroulou dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 29/08/2007, 17h54

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