example - ¿Redirigir la salida de la consola a JavaFX TextArea?
add controller to fxml (1)
Quiero mostrar el resultado de la consola en un JavaFX TextArea ... desafortunadamente no puedo encontrar ningún ejemplo funcional para JavaFX pero solo para Java Swing, que no parece funcionar en mi caso.
EDITAR:
Traté de seguir este ejemplo: http://unserializableone.blogspot.ch/2009/01/redirecting-systemout-and-systemerr-to.html
y extendió mi código como se muestra a continuación. Sin embargo, ya no hay salida de consola en mi Eclipse IDE, pero tampoco hay salida en mi TextArea. ¿Alguna idea de dónde estoy haciendo mal?
public class Activity extends OutputStream implements Initializable {
@FXML
public static TextArea taRecentActivity;
public Activity() {
// TODO Auto-generated constructor stub
}
@Override
public void initialize(URL location, ResourceBundle resources) {
OutputStream out = new OutputStream() {
@Override
public void write(int b) throws IOException {
updateTextArea(String.valueOf((char) b));
}
@Override
public void write(byte[] b, int off, int len) throws IOException {
updateTextArea(new String(b, off, len));
}
@Override
public void write(byte[] b) throws IOException {
write(b, 0, b.length);
}
};
System.setOut(new PrintStream(out, true));
System.setErr(new PrintStream(out, true));
}
private void updateTextArea(final String text) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
taRecentActivity.appendText(text);
}
});
}
@Override
public void write(int arg0) throws IOException {
// TODO Auto-generated method stub
}
}
Acabo de hacer esto y funcionó. Aunque fue muy lento con grandes cantidades de texto.
public void appendText(String str) {
Platform.runLater(() -> textField.appendText(str));
}
y
@Override
public void initialize(URL location, ResourceBundle resources) {
OutputStream out = new OutputStream() {
@Override
public void write(int b) throws IOException {
appendText(String.valueOf((char) b));
}
};
System.setOut(new PrintStream(out, true));
}