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?
Console de message Affiche une solution pour cela.
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
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
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.