web-dev-qa-db-fra.com

Comment rediriger le contenu de la console dans une Textarea en Java?

J'essaie d'obtenir le contenu de la console dans une Textarea en Java.

Par exemple, si nous avons ce code,

class FirstApp {
    public static void main (String[] args){
        System.out.println("Hello World");
    }
}

et je veux émettre le "Hello World" à un Textarea, quelle action-mesure dois-je choisir?

15
user618111

Console de message Affiche une solution pour cela.

6
camickr

J'ai trouvé cette solution simple:

Tout d'abord, vous devez créer une classe pour remplacer la sortie standard:

public class CustomOutputStream extends OutputStream {
    private JTextArea textArea;

    public CustomOutputStream(JTextArea textArea) {
        this.textArea = textArea;
    }

    @Override
    public void write(int b) throws IOException {
        // redirects data to the text area
        textArea.append(String.valueOf((char)b));
        // scrolls the text area to the end of data
        textArea.setCaretPosition(textArea.getDocument().getLength());
        // keeps the textArea up to date
        textArea.update(textArea.getGraphics());
    }
}

Ensuite, vous remplacez les normes comme suit:

JTextArea textArea = new JTextArea(50, 10);
PrintStream printStream = new PrintStream(new CustomOutputStream(textArea));
System.setOut(printStream);
System.setErr(printStream);

Le problème est que toutes les sorties ne seront affichées que dans la zone de texte.

Source avec un échantillon: http://www.codejava.net/java-se/swing/redirect-standard-Output-streams-a-jtextarea

5
Sertage

Vous devrez rediriger System.out à une sous-classe sur mesure et observable de PrintStream, de sorte que chaque char ou chaque ligne ajoutée à ce flux puisse mettre à jour le contenu du Texarea (je suppose que c'est un composant AWT ou Swing)

L'instance PrintStream pourrait être créée avec un ByteArrayOutputStream, qui collecterait la sortie de la redirection System.out

2
Andreas_D

Une des tâches que vous pouvez le faire en définissant le System OutputStream à un PipedOutputStream et connectez-le à un PipedInputStream que vous avez lu pour ajouter du texte à votre composant, par exemple

PipedOutputStream pOut = new PipedOutputStream();   
System.setOut(new PrintStream(pOut));   
PipedInputStream pIn = new PipedInputStream(pOut);  
BufferedReader reader = new BufferedReader(new InputStreamReader(pIn));

Avez-vous regardé le lien suivant? Sinon, alors vous devez.

2
sgokhales
1
OscarRyz