Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1680 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Affichage des sorties d'un programme en C via un widget en SWT

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Affichage des sorties d'un programme en C via un widget en SWT

n°1557326
Jon Snow
Posté le 09-05-2007 à 13:27:46  profilanswer
 

Bonjour tous le monde
 
Voila, mon petit probleme:
 
Je lance un programme C via la commande runtime ... et process de java, jarrive a afficher les message de sortie de ce programme avec des system.out.println... Mais a la place de mon system.out.println() j'aimerai pouvoir les afficher dans une fenetre que jai créer dans un Text (widget SWT).
Voici mon code...
 

Citation :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
 
public class RunStarGeneGUI {
 
 private Shell shell;
 private GridLayout gridLayout;
 private GridData gridData;
 private Display display;
 private String cmd;
 private Text allStarGene, term;
 
 /**
  * Constructeur
  * @param display Le display de la fenetre
  * @param cmd La commande a executer
  */
 public RunStarGeneGUI(Display display, final String cmd){
  this.display = display;
  this.cmd = cmd;
  this.initLayout();
  this.initShell();
  this.initRunStarGeneGUI();
  this.run();
  this.ear();
 }
 
 private void initShell(){
  // create the shell
  this.shell = new Shell(SWT.TITLE | SWT.CLOSE | SWT.RESIZE);
  this.shell.setText("Run of STARGene" );
  this.shell.setSize(517, 486);
  shell.setLayout(gridLayout);
 }
 
 private void initLayout(){
  this.gridLayout = new GridLayout();
  gridLayout.numColumns = 1;
   
  this.gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
 }
 
 private void initRunStarGeneGUI(){
  this.allStarGene = new Text(this.shell, SWT.H_SCROLL | SWT.V_SCROLL);
  allStarGene.setLayoutData(gridData);
  this.term = new Text(this.shell, SWT.H_SCROLL | SWT.V_SCROLL);
  term.setLayoutData(gridData);
 }
 
 public void run(){
  display.asyncExec (new Runnable () {
 
   public void run () {
    try{
     Runtime r = Runtime.getRuntime();
     Process p = r.exec(cmd);
     // Consommation de la sortie standard de l'application externe dans un Thread separe
     try {
      BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
      String line = "";
      try {
       while((line = reader.readLine()) != null) {
        System.out.println(line);
        /*
         * Ici j'aimerai faire un :
         * term.setText(line);
         * mais ça ne marche pas
         */
       }
      } finally {
       reader.close();
      }
     } catch(IOException ioe) {
      ioe.printStackTrace();
     }
 
    } catch (Exception e){
     System.err.println("Probleme"+e+": dans le lancement de StarGene avec la commande :"+cmd);
    }
   }
  });
 }
 
 // Affiche la fenetre
 private void ear(){  
  shell.open();
  while (!shell.isDisposed())
   if (!display.readAndDispatch())
    display.sleep();
 }
}

mood
Publicité
Posté le 09-05-2007 à 13:27:46  profilanswer
 

n°1558245
yaltar
Posté le 10-05-2007 à 16:53:01  profilanswer
 

Bonjour,
a priori je ne vois pas de soucis.
 
Tu veux dire quoi par "mais ça ne marche pas"
 
Qu'es ce que qui ce passe ?

n°1558640
Jon Snow
Posté le 11-05-2007 à 09:50:46  profilanswer
 

Eh bien, il ny a rien qui s'affiche dans mon Text, et quand je quitte la fenetre contenant le Text il me sort une exception du type widgetIsDisposed ou quelque chose dans le genre...
Je pense ke le probleme viens de la synchronisation, jessay de modifier un widget pendant que lapplication sexecute, mais je ne sais pas comment faire..


Message édité par Jon Snow le 11-05-2007 à 09:52:10
n°1558993
yaltar
Posté le 11-05-2007 à 15:54:51  profilanswer
 

Bon je testerais plus du genre :  
StringBuilder sb = new StringBuilder();
 
       while((line = reader.readLine()) != null) {  
        System.out.println(line);  
        sb.append(line);
       }
 
       term.setText(sb.toString());  
 
 
Parce qu'en fait tu écrase la valeur du texte à chaque boucle, il suffit que le dernier texte soit vide, et tu vois rien.
Je me trompe peut être.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Affichage des sorties d'un programme en C via un widget en SWT

 

Sujets relatifs
Affichage automatiques de nombreuses images sur une page webCorrection programme vb équation 3 em degrés
[C] petit programme qui fonctionne pas.....Vérifier la présence d'un programme local
affichage dans une pageProbleme affichage image dans une applet
[Python] Packager un programmeprogramme qui se déclenche automatiquement
Besoin d'aide pour ce programmeprobleme d'affichage sous ie
Plus de sujets relatifs à : Affichage des sorties d'un programme en C via un widget en SWT


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR