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

avec Java Discussion :

Flux d'un programme externe


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 14
    Points : 18
    Points
    18
    Par défaut Flux d'un programme externe
    Bonjour à tous,

    Je voudrais récupérer le flux de sorti du programme "Imagemagick" afin d'afficher l'image convertie correspondante. Je me demandais quelles sont les conditions pour créer un flux d'entrée ou de sorti pour échanger avec un programme externe?

    Pour cela j'ai essayé ce code qui ne fonctionne pas.
    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
     
    //On récupére le processus avec la commande associée
    processus = Runtime.getRuntime().exec(commande);
     
    //Puis le flux
    InputStream inputStream = processus.getInputStream();
     
    //On crée un channel et on récupère un ReadableByteChannel
    ReadableByteChannel ReadableByteChannel = Channels.newChannel(InputStream);
     
    //On lit le flux par l'intermédiaire du channel et on place le résultat de la lecture dans un ByteBuffer
    ByteBuffer buffer = ByteBuffer.allocate(1024);
    ReadableByteChannel.read(buffer);
     
    //On récupére le tableau de sorti
    byte[] tableau_byte = buffer.array();      
     
    //On crée l'image           
    Toolkit Toolkit = jtextpane.getToolkit();            
    Image img = Toolkit.createImage(tableau_byte, 0, tableau_byte.length); 
     
    //On l'affiche dans un JTextPane
    jtextpane.insertIcon(new ImageIcon(img));
    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Heu, là tu ne lit que 1024 bytes sur ton channel, je doute que ce soit ce qui t'intéresse


    Tu va devoir lire toi même progressivement l'inputstream, en le réécrivant par exemple dans un ByteArrayOutputstream pour faire la conversion en byte[]

    MAlheureusement, Toolkit n'a pas de méthode qui prend directement un inputstream :s

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    MAlheureusement, Toolkit n'a pas de méthode qui prend directement un inputstream :s
    Mais ImageIO, si. Ce sera tout de même bien plus simple.

    En gros,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image img = ImageIO.read(processus.getInputStream());
    On a déjà vu plus compliqué -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    J'ai essaye de lire le flux et de récupérer une image avec la méthode read(inputstream) de la classe ImageIO.

    Maintenant j'ai une erreur: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException à la ligne 6 du code ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String[] commande = {"programme", "paramètre 1" , "paramètre 2"}
     
    processus = Runtime.getRuntime().exec(commande);              
     
    return processus.getInputStream();

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu ne dois pas nous avoir donné tout ton code, ce code ne peux pas déclencher un NPE sur la ligne indiquée.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 14
    Points : 18
    Points
    18
    Par défaut
    Oui la source de l'erreur se trouve sur une ligne de la classe ImageIcon.

    Voilà le code maintenant pour récupérer une image d'un programme externe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image img = ImageIO.read(Runtime.getRuntime().exec(commande).getInputStream());
    Faut-il que le programme externe ouvre un flux sortant afin de pouvoir y avoir accès? C'est peut être pas le cas du programme avec lequel j' essai de récupérer des données. Il crée un fichier, et j'aurai voulu plutôt directement charger son contenu, sans passer par un fichier.

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Si le programme que tu utilise écrit dans un fichier, il faudra ouvrir ce fichier. Le code que tu montre ne marche que si le programme envoie l'image dans son stdout, pas si il l'écrit dans un fichier.

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

Discussions similaires

  1. Redirection Flux programme externe
    Par dagbass dans le forum VBA Access
    Réponses: 0
    Dernier message: 02/06/2014, 16h36
  2. faire un test sur un programme externe
    Par marieheraud dans le forum Windows
    Réponses: 3
    Dernier message: 02/09/2004, 18h32
  3. [Kylix] pb d'appel de programme externe
    Par wizwiz dans le forum EDI
    Réponses: 2
    Dernier message: 27/08/2004, 09h29
  4. [Debutant(e)]Execution d'un programme externe
    Par saidi_chahrat dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 26/08/2004, 11h35
  5. appel programme externe depuis pl/sql
    Par txouki dans le forum PL/SQL
    Réponses: 6
    Dernier message: 11/05/2004, 18h35

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