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

Agents de placement/Fenêtres Java Discussion :

Intercepter un flux de sortie dans une JFrame


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Par défaut Intercepter un flux de sortie dans une JFrame
    Bonjour
    Alors j'aimerai afficher le résultat de ma " console" dans une JFrame à part.
    Je me suis renseigné et on m'as dit que je pouvais créer une liste dans ma classe Finally et ensuite la récupérer dans ma méthode traiterFichier et appeler ma nouvelle méthode dans ma classe SimpleFenetre... Qu'en pensez-vous ? est ce simple ?

    J'ai ma classe ci dessous :

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Collection;
    import java.util.LinkedHashSet;
     
    public class Finally {
     
     
    	public static final String ZONE_B = "#>"; // le début de la sous partie de texte à extraire
    	public static final String ZONE_E = "#<"; // la fin de la sous partie de texte à extraire
    	public static final String VALUE_B = "{"; // le début d'un mot à extraire
    	public static final String VALUE_E = "}"; // la fin d'un mot à extraire
    	public static final String PATH = "fichierCSH.txt"; // le nom du fichier par défaut lu
     
    	/* On peut passer un paramètre à la méthode main() : 
    	 * le nom du fichier et  s'il n'est pas spécifiée, on utilise PATH. 
    	 * Cette méthode appelle d'abord extract() 
    	 * puis split() et affiche les mots distincts trouvés 
    	 */
     
    	public static void main(String[] args) {
     
    		String path;
    		if ( args.length>0 ) {
    			path = args[0];
    		}
    		else {
    			path = PATH;
    		}
     
                   new Finally().traiterFichier(ZONE_B, ZONE_E, VALUE_B, VALUE_E, path);	
    	}
     
    	public void traiterFichier(String zoneB, String zoneE, String valueB, String valueE, String filename) {
     
            String string = extract(filename, zoneB, zoneE);   
            
    	if (string != null) {
    		Collection<String> mots = split(string, valueB, valueE);
    		for (String mot : mots) {
    			 System.out.println(mot);
    		}
     
    	} else {
     
    		System.out.println("Aucune chaine trouvée comprise entre " + zoneB
    				+ " et " + zoneE);
    	}
     
    	}
     
    	/**
    	 * Lit le fichier spécifié et extrait la partie située entre ZONE_B et ZONE_E
    	 * @param filename nom du fichier
    	 * @return la chaîne extraite ou null si aucune chaîne trouvée, ou si le fichier n'existe pas
    	 */
     
    	private  String extract(String filename, String ZONE_B, String ZONE_E) { 
     
    		try {
     
    			StringBuilder stringBuilder = new StringBuilder();  
     
    			BufferedReader buff = new BufferedReader(new FileReader(filename));
     
    			try {
    				String line;
     
    				while ((line = buff.readLine()) != null) { 
    					stringBuilder.append(line);  
    					stringBuilder.append('\n');
    				}
    			} finally {
    				buff.close();
    			}
     
    			String toutLeFichier = stringBuilder.toString();  
     
    			int a = toutLeFichier.indexOf(ZONE_B);
    			int b = toutLeFichier.indexOf(ZONE_E);
     
    			if (a >= 0 && b >= 0) { 
    				return toutLeFichier.substring(a + ZONE_B.length(), b); 
    			}
     
    		}
     
    		catch( FileNotFoundException e) {
    			System.err.println("Fichier " + new File(filename).getAbsolutePath() + " introuvable"); 
    		}
    		catch (IOException ioe) {
    			System.err.println("Erreur --" + ioe.getMessage());
    			ioe.printStackTrace();
    		}
     
    		return null;
     
    	}
     
    	/**
    	 * Extrait de la chaîne spécifiée la liste, sans doublons, des mots situés entre VALUE_B et VALUE_E 
    	 * @param string la chaîne dont on doit extraire les mots
    	 * @return la liste de mots extraite
    	 */
     
     
    	private  Collection<String> split(String string, String VALUE_B, String VALUE_E) {
     
    		 Collection<String> mots = new LinkedHashSet<>();  
     
     
    		String[] tab = string.split("\n");
    		for (int i = 0; i < tab.length; i++) {  
     
    			//System.out.println(i + " : " + tab[i]);
     
    			int index1 = tab[i].indexOf(VALUE_B);  
    			while (index1 >= 0) {  
     
    				int index2 = tab[i].indexOf(VALUE_E, index1);  
    				if (index2 >= 0) {  
     
    					int index3 = tab[i].lastIndexOf("{", index2);  
    					if (index3 != index1) {  
    						System.err
    								.println("Problème dans le fichier : { non fermée en "
    										+ index1);
    					}
     
    					String x = tab[i].substring(index1 + 1, index2);  
     
    					mots.add(x);  
     
    				} else {
     
     
    					System.err
    							.println("Problème dans le fichier : { non fermée en "
    									+ index1);
    					break;  
     
    				}
     
    				index1 = tab[i].indexOf(VALUE_B, index2);  
     
    			} // fin de la boucle while
     
    		} // fin de la boucle for                                                                                                                                                                                                                                                                                            
     
    		return mots;
    	}
     
     
     
    }
    ainsi que ma classe SimpleFenetre :

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
     import java.awt.EventQueue;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
     
    import javax.swing.ButtonGroup;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.border.EmptyBorder;
     
     
    public class simplefenetre extends JFrame {
     
    	private JPanel contentPane;
    	private static JTextField zoneB;
    	private static JTextField valueE;
    	private static JTextField zoneE;
    	private static JTextField valueB;
    	private JTextField textField_4;
     
     
     
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					simplefenetre frame = new simplefenetre();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
     
    	/* Le constructeur */
     
    	public simplefenetre() {
    		// On créer un groupe de boutons .
    		ButtonGroup groupeDeBoutons = new ButtonGroup(); 
     
     
    		setTitle("Traiter vos fichiers");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 450, 300);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		contentPane.setLayout(null);
     
    		// Button "OK"
    		JButton btnOk = new JButton("OK");
    		btnOk.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {	
    				// On lit les 5 champs 
     
    				String ZONE_B = zoneB.getText();
    				String ZONE_E = zoneE.getText();
    				String VALUE_B = valueB.getText();
    				String VALUE_E = valueE.getText();
    				String PATH = textField_4.getText();
     
    				// On appelle la méthode de l'autre classe 
    				 new Finally().traiterFichier(ZONE_B, ZONE_E, VALUE_B, VALUE_E, PATH);
    			}	
     
    		});
     
    		// mise en relation du bouton ok avec les deux autres
    		groupeDeBoutons.add(btnOk);
    		btnOk.setBounds(243, 228, 58, 23);
    		contentPane.add(btnOk);
     
    		// Button "PARCOURIR"
     
    		JButton btnParcourir = new JButton("PARCOURIR");
    		btnParcourir.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				browseFile();  // sert au bouton PARCOURIR d'aller chercher un fichier x 			
    			}
    		});
     
    		// mise en relation du bouton PARCOURIR avec les deux autres
    				groupeDeBoutons.add(btnParcourir);
    		btnParcourir.setBounds(304, 56, 120, 23);
    		contentPane.add(btnParcourir);
     
    		// Button "ANNULER"
     
    		JButton btnAnnuler = new JButton("ANNULER");
    		btnAnnuler.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				System.exit(0);
    			}
    		});
     
    		// mise en relation du bouton ANNULER avec les deux autres
    		groupeDeBoutons.add(btnAnnuler);
    		btnAnnuler.setBounds(311, 228, 113, 23);
    		contentPane.add(btnAnnuler);
     
    		// On créer les composants de saisies .
     
    		zoneB = new JTextField("#>");
    		zoneB.setBounds(116, 112, 86, 20);
    		contentPane.add(zoneB);
    		zoneB.setColumns(10);
     
    		zoneE = new JTextField("#<");
    		zoneE.setBounds(116, 145, 86, 20);
    		contentPane.add(zoneE);
    		zoneE.setColumns(10);
     
    		valueB = new JTextField("{");
    		valueB.setBounds(116, 176, 86, 20);
    		contentPane.add(valueB);
    		valueB.setColumns(10);
     
    		valueE = new JTextField("}");
    		valueE.setBounds(116, 207, 86, 20);
    		contentPane.add(valueE);
    		valueE.setColumns(10);
     
     
    		JLabel lblNewLabel = new JLabel("VALUE_B ");
    		lblNewLabel.setBounds(10, 179, 86, 14);
    		contentPane.add(lblNewLabel);
     
    		JLabel lblNewLabel_1 = new JLabel("ZONE_B");
    		lblNewLabel_1.setBounds(10, 115, 73, 14);
    		contentPane.add(lblNewLabel_1);
     
    		JLabel lblNewLabel_2 = new JLabel("VALUE_E");
    		lblNewLabel_2.setBounds(10, 210, 73, 14);
    		contentPane.add(lblNewLabel_2);
     
    		JLabel lblNewLabel_3 = new JLabel("ZONE_E");
    		lblNewLabel_3.setBounds(10, 148, 73, 14);
    		contentPane.add(lblNewLabel_3);
     
    		textField_4 = new JTextField();
    		textField_4.setBounds(10, 57, 192, 20);
    		contentPane.add(textField_4);
    		textField_4.setColumns(10);
     
     
     
    	}
     
    	private void browseFile() {
    		JFileChooser fileChooser = new JFileChooser();
    		fileChooser.setDialogTitle("Choisir le fichier...");
    		fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    		fileChooser.setMultiSelectionEnabled(false);
    		if ( !textField_4.getText().isEmpty() ) { // faire bien attention : bien faire correspondre notre textField choisi, ici le textField_4
    			fileChooser.setSelectedFile(new File(zoneB.getText()));
    		}
    		// il y a plein d'autres méthodes pour customiser le composant (filtre sur les fichiers par exemple) : voir doc.
    		if ( fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION ) { 
    			textField_4.setText(  fileChooser.getSelectedFile().getAbsolutePath().toString() );
    		}
    	}
     
    }

  2. #2
    Membre éprouvé Avatar de Arislas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 116
    Par défaut
    Salut,

    Ca me parait assez simple et ça devrait effectuer ce que tu attends. Essaie de mettre en place ta solution.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Par défaut
    Yop

    J'ai trouver une autre astuce mais il manque quelque chose que je n'arrive pas à voir!!

    code simple fenetre :
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
     import java.awt.EventQueue;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
    import java.util.Collection;
    import java.util.LinkedHashSet;
     
    import javax.swing.ButtonGroup;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.border.EmptyBorder;
    import javax.swing.JTextArea;
     
     
    public class simplefenetre extends JFrame {
     
    	private JPanel contentPane;
    	private static JTextField zoneB;
    	private static JTextField valueE;
    	private static JTextField zoneE;
    	private static JTextField valueB;
    	private JTextField textField_4;
     
     
     
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					simplefenetre frame = new simplefenetre();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
     
    	/* Le constructeur */
     
    	public simplefenetre() {
    		// On créer un groupe de boutons .
    		ButtonGroup groupeDeBoutons = new ButtonGroup(); 
     
     
    		setTitle("Traiter vos fichiers");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 450, 300);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		contentPane.setLayout(null);
     
    		// Button "OK"
    		JButton btnOk = new JButton("OK");
    		btnOk.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {	
    				// On lit les 5 champs 
     
    				String ZONE_B = zoneB.getText();
    				String ZONE_E = zoneE.getText();
    				String VALUE_B = valueB.getText();
    				String VALUE_E = valueE.getText();
    				String PATH = textField_4.getText();
     
     
    				// On appelle la méthode traiterFichier 
    				Collection<String> a1 = new LinkedHashSet<>(); 
     
    				Console fenetre = new Console();
     
    				 a1 = new Finally().traiterFichier(ZONE_B, ZONE_E, VALUE_B, VALUE_E, PATH);
    				 for (String mot : a1)
    				 {
    				 //affichage
    					System.out.println(mot);
    					fenetre.prompt(mot);
     
    				 }
    			}	
     
    		});
     
    		// mise en relation du bouton ok avec les deux autres
    		groupeDeBoutons.add(btnOk);
    		btnOk.setBounds(243, 228, 58, 23);
    		contentPane.add(btnOk);
     
    		// Button "PARCOURIR"
     
    		JButton btnParcourir = new JButton("PARCOURIR");
    		btnParcourir.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				browseFile();  // sert au bouton PARCOURIR d'aller chercher un fichier x 			
    			}
    		});
     
    		// mise en relation du bouton PARCOURIR avec les deux autres
    				groupeDeBoutons.add(btnParcourir);
    		btnParcourir.setBounds(304, 56, 120, 23);
    		contentPane.add(btnParcourir);
     
    		// Button "ANNULER"
     
    		JButton btnAnnuler = new JButton("ANNULER");
    		btnAnnuler.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				System.exit(0);
    			}
    		});
     
    		// mise en relation du bouton ANNULER avec les deux autres
    		groupeDeBoutons.add(btnAnnuler);
    		btnAnnuler.setBounds(311, 228, 113, 23);
    		contentPane.add(btnAnnuler);
     
    		// On créer les composants de saisies .
     
    		zoneB = new JTextField("#>");
    		zoneB.setBounds(116, 112, 86, 20);
    		contentPane.add(zoneB);
    		zoneB.setColumns(10);
     
    		zoneE = new JTextField("#<");
    		zoneE.setBounds(116, 145, 86, 20);
    		contentPane.add(zoneE);
    		zoneE.setColumns(10);
     
    		valueB = new JTextField("{");
    		valueB.setBounds(116, 176, 86, 20);
    		contentPane.add(valueB);
    		valueB.setColumns(10);
     
    		valueE = new JTextField("}");
    		valueE.setBounds(116, 207, 86, 20);
    		contentPane.add(valueE);
    		valueE.setColumns(10);
     
     
    		JLabel lblNewLabel = new JLabel("VALUE_B ");
    		lblNewLabel.setBounds(10, 179, 86, 14);
    		contentPane.add(lblNewLabel);
     
    		JLabel lblNewLabel_1 = new JLabel("ZONE_B");
    		lblNewLabel_1.setBounds(10, 115, 73, 14);
    		contentPane.add(lblNewLabel_1);
     
    		JLabel lblNewLabel_2 = new JLabel("VALUE_E");
    		lblNewLabel_2.setBounds(10, 210, 73, 14);
    		contentPane.add(lblNewLabel_2);
     
    		JLabel lblNewLabel_3 = new JLabel("ZONE_E");
    		lblNewLabel_3.setBounds(10, 148, 73, 14);
    		contentPane.add(lblNewLabel_3);
     
    		textField_4 = new JTextField();
    		textField_4.setBounds(10, 57, 192, 20);
    		contentPane.add(textField_4);
    		textField_4.setColumns(10);
     
    	}
     
    	private void browseFile() {
    		JFileChooser fileChooser = new JFileChooser();
    		fileChooser.setDialogTitle("Choisir le fichier...");
    		fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    		fileChooser.setMultiSelectionEnabled(false);
    		if ( !textField_4.getText().isEmpty() ) { // faire bien attention : bien faire correspondre notre textField choisi, ici le textField_4
    			fileChooser.setSelectedFile(new File(zoneB.getText()));
    		}
    		// il y a plein d'autres méthodes pour customiser le composant (filtre sur les fichiers par exemple) : voir doc.
    		if ( fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION ) { 
    			textField_4.setText(  fileChooser.getSelectedFile().getAbsolutePath().toString() );
    		}
    	}
    }
    code console :
    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
     
    import java.util.Collection;
     
    import javax.swing.JFrame;
    import javax.swing.JTextArea;
     
     
    public class Console {
     
    	public JTextArea res;
     
    	public Console() {
    		 JFrame f = new JFrame("Console");
    		    JTextArea res = new JTextArea();
    		    f.setSize(300, 300);  
    		    f.add(res); // ajout du JTextArea dans la fenetre f
    		    f.setVisible(true);
     
    	}
     
     
    	public void prompt(String mot) {
    	    res.append(mot + "\n");
    	}
    }
    code Finally :
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.PrintStream;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.LinkedHashSet;
     
    public class Finally {
     
     
    	public static final String ZONE_B = "#>"; // le début de la sous partie de texte à extraire
    	public static final String ZONE_E = "#<"; // la fin de la sous partie de texte à extraire
    	public static final String VALUE_B = "{"; // le début d'un mot à extraire
    	public static final String VALUE_E = "}"; // la fin d'un mot à extraire
    	public static final String PATH = "fichierCSH.txt"; // le nom du fichier par défaut lu
     
    	/* On peut passer un paramètre à la méthode main() : 
    	 * le nom du fichier et  s'il n'est pas spécifiée, on utilise PATH. 
    	 * Cette méthode appelle d'abord extract() 
    	 * puis split() et affiche les mots distincts trouvés 
    	 */
     
    	public static void main(String[] args) {
     
    		String path;
    		if ( args.length>0 ) {
    			path = args[0];
    		}
    		else {
    			path = PATH;
    		}
     
                   new Finally().traiterFichier(ZONE_B, ZONE_E, VALUE_B, VALUE_E, path);	
    	}
     
    	public Collection<String> traiterFichier(String zoneB, String zoneE, String valueB, String valueE, String filename) {
     
            String string = extract(filename, zoneB, zoneE);   
            Collection<String> mots = new LinkedHashSet<>();  
     
    	if (string != null) {
    		mots = split(string, valueB, valueE);
     
     
    	} else {
     
    		System.out.println("Aucune chaine trouvée comprise entre " + zoneB
    				+ " et " + zoneE);
    	}
    	return mots;
     
    	}
     
    	/**
             * Lit le fichier spécifié et extrait la partie située entre ZONE_B et ZONE_E
             * @param filename nom du fichier
             * @return la chaîne extraite ou null si aucune chaîne trouvée, ou si le fichier n'existe pas
             */
     
    	private  String extract(String filename, String ZONE_B, String ZONE_E) { 
     
    		try {
     
    			StringBuilder stringBuilder = new StringBuilder();  
     
    			BufferedReader buff = new BufferedReader(new FileReader(filename));
     
    			try {
    				String line;
     
    				while ((line = buff.readLine()) != null) { 
    					stringBuilder.append(line);  
    					stringBuilder.append('\n');
    				}
    			} finally {
    				buff.close();
    			}
     
    			String toutLeFichier = stringBuilder.toString();  
     
    			int a = toutLeFichier.indexOf(ZONE_B);
    			int b = toutLeFichier.indexOf(ZONE_E);
     
    			if (a >= 0 && b >= 0) { 
    				return toutLeFichier.substring(a + ZONE_B.length(), b); 
    			}
     
    		}
     
    		catch( FileNotFoundException e) {
    			System.err.println("Fichier " + new File(filename).getAbsolutePath() + " introuvable"); 
    		}
    		catch (IOException ioe) {
    			System.err.println("Erreur --" + ioe.getMessage());
    			ioe.printStackTrace();
    		}
     
    		return null;
     
    	}
     
    	/**
             * Extrait de la chaîne spécifiée la liste, sans doublons, des mots situés entre VALUE_B et VALUE_E 
             * @param string la chaîne dont on doit extraire les mots
             * @return la liste de mots extraite
             */
     
     
    	private  Collection<String> split(String string, String VALUE_B, String VALUE_E) {
     
    		 Collection<String> mots = new LinkedHashSet<>();  
     
     
    		String[] tab = string.split("\n");
    		for (int i = 0; i < tab.length; i++) {  
     
    			//System.out.println(i + " : " + tab[i]);
     
    			int index1 = tab[i].indexOf(VALUE_B);  
    			while (index1 >= 0) {  
     
    				int index2 = tab[i].indexOf(VALUE_E, index1);  
    				if (index2 >= 0) {  
     
    					int index3 = tab[i].lastIndexOf("{", index2);  
    					if (index3 != index1) {  
    						System.err
    								.println("Problème dans le fichier : { non fermée en "
    										+ index1);
    					}
     
    					String x = tab[i].substring(index1 + 1, index2);  
     
    					mots.add(x);  
     
    				} else {
     
     
    					System.err
    							.println("Problème dans le fichier : { non fermée en "
    									+ index1);
    					break;  
     
    				}
     
    				index1 = tab[i].indexOf(VALUE_B, index2);  
     
    			} // fin de la boucle while
     
    		} // fin de la boucle for                                                                                                                                                                                                                                                                                            
     
    		return mots;
    	}
     
     
     
    }
    Quand je compile il me dit qu'il y a deux erreur au niveau des lignes suivantes :

    1/ res.append(mot + "\n"); // de la classe Console
    2/ fenetre.prompt(mot); // de la classe simplefenetre

  4. #4
    Membre éprouvé Avatar de Arislas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 116
    Par défaut
    tu pourrais nous donner l'erreur en entier avec un copié/collé. Mais je pense qu'il n'aime pas ton " + "\n" " .

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Par défaut
    Citation Envoyé par Arislas Voir le message
    tu pourrais nous donner l'erreur en entier avec un copié/collé. Mais je pense qu'il n'aime pas ton " + "\n" " .
    code erreur ;

    etude
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Console.prompt(Console.java:23)
    at simplefenetre$2.actionPerformed(simplefenetre.java:81)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$300(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)


    bizarre
    je veux retrouver mon résultat de la console sur ma fenetre mais sa ne marche pas!!

  6. #6
    Membre éprouvé Avatar de Arislas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2015
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 116
    Par défaut
    Après avoir bien relu ton programme, il me semble que tu doit envoyé un Collection vide, du fait que les valeurs ne doivent pas correctement entré dans celle-ci. Mais du coup je n'est pas trop l'habitude de traiter avec ce genre de méthode de renvoie variable...

    Pour t'aider, il va falloir que tu lance ton programme en mode debug avec un point d'arrêt avant la ligne qui plante et vérifier les valeurs de ta collection.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2014
    Messages : 180
    Par défaut
    Re Arislas

    en faite fallai rajouter un this.
    C'est ça qui causé problème ! :/

    code :


    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
    import java.util.Collection;
     
    import javax.swing.JFrame;
    import javax.swing.JTextArea;
     
     
    public class Console {
     
    	public JTextArea res;
     
    	public Console() {
    		 JFrame f = new JFrame("Console");
    		    this.res = new JTextArea();
    		    f.setSize(300, 300);  
    		    f.add(res); // ajout du JTextArea dans la fenetre f
    		    f.setVisible(true);
    		    //res.append("bonjour\n");
     
    	}
     
     
    	public void prompt(String mot) {
    	    this.res.append(mot +"\n");
    	}
    }
    Du coup c'est pour ça qu'il n'y avait rien d'afficher sur le JTextArea!

Discussions similaires

  1. GIF anime dans une JFrame
    Par BernardT dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 16/08/2005, 11h50
  2. Disposition de composants dans une JFrame
    Par Regis.C dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 21/03/2005, 17h38
  3. [JLabel] Chargement d'image dans une JFrame
    Par mr.t dans le forum Composants
    Réponses: 10
    Dernier message: 27/01/2005, 18h32
  4. Gestion de menu, JPanels dans une JFrame
    Par Doc.Fusion dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 03/12/2004, 18h27
  5. [JFrame] affichage de component et d'image dans une JFrame
    Par Joeleclems dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 08/10/2004, 16h17

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