将控制台输出重定向到JavaFX TextArea?

我想在JavaFX TextArea中显示控制台输出…不幸的是,我找不到JavaFX的任何有效示例,而只能找到Java

Swing的实例,在我看来,这似乎不起作用。

我尝试遵循以下示例:http :

//unserializableone.blogspot.ch/2009/01/redirecting-systemout-and-systemerr-

to.html

并扩展了我的代码,如下所示。但是,我的Eclipse IDE中不再有控制台输出,而我的TextArea中也没有输出。知道我在哪里做错了吗?

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

}

}

回答:

我就是这样做的,而且行得通。尽管处理大量文本非常慢。

public void appendText(String str) {

Platform.runLater(() -> textField.appendText(str));

}

@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));

}

以上是 将控制台输出重定向到JavaFX TextArea? 的全部内容, 来源链接: utcz.com/qa/418177.html

回到顶部