Bonjour,
J'ai crée un programme qui fonctionne en ligne de commande et j'ai récemment ajouté une interface graphique. Je ne voulais pas modifier le premier, j'ai donc cherché à rediriger les flux de sorties (System.out) vers un composant Swing en l'occurrence un JtextArea qui se prête bien à une sorte de console.
J'ai donc crée une classe qui étend JtextArea et dans laquelle je redéfini la chose avec System.setOut....
Cela marche ... mais c'est lent ! Lorsqu'un mode console, l'affichage de 1000 lignes est instantané, celui de ces même lignes en mode graphique est relativement lent (env 10s)
J'ai beau diminuer les valeurs d'attente du thread, mettre le thread en haute priorité ... rienà faire => help
Mon code
Merci d'avance
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 import java.io.*; import javax.swing.*; public class JTextAreaConsole extends JTextArea implements Runnable { private Thread thread; private final PipedInputStream p_input = new PipedInputStream(); public JTextAreaConsole() { super(); redirectOut(); } public JTextAreaConsole(int i, int j) { super(i,j); redirectOut(); } private void redirectOut(){ try { PipedOutputStream p_output = new PipedOutputStream(p_input); System.setOut(new PrintStream(p_output,true)); } catch (Exception e) { append("STDOUT can't be displayed in the JTextAreaConsole Object\n"+e.getMessage()); } thread = new Thread(this); thread.setDaemon(true); thread.start(); } public synchronized void run() { while ( true ) { try { wait(1); } catch (InterruptedException e) { append("ERROR\n"+e.getMessage()); } try { if (p_input.available() != 0) { append(read(p_input)); setCaretPosition(getDocument().getLength()); } } catch (IOException e) { append("ERROR\n"+e.getMessage()); } } } private String read(PipedInputStream p_input) throws IOException { int size = p_input.available(); byte tab[] = new byte[size]; p_input.read(tab); return new String(tab,0,tab.length); } }![]()
Partager