将 System.out 重定向到 JavaFX 中的 TextArea
2022-09-02 21:47:35
更新:
仍然有同样的问题,修改了主应用代码的来源:http://pastebin.com/fLCwuMVq
一定有什么东西阻止了UI,但它做了各种各样的事情(异步xmlrpc请求,异步http请求,文件io等),我尝试把它全部放进去,但它没有帮助。CoreTest
runLater
更新 2:
我验证了代码正确运行并生成输出,但UI组件无法长时间显示它
更新 3:
好吧,我修好了。我不知道为什么,但是没有关于JavaFX的指南说过这一点,它非常重要:
始终将程序逻辑放在与 Java FX 线程不同的线程中
我曾使用Swing's进行过这项工作,但由于某种原因,它不适用于JavaFX。JTextArea
我尝试调试,它并在每次写入后返回似乎正确写入它的字符,但GUI中的实际情况没有显示任何文本。.getText()
TextArea
我是否忘了以某种方式刷新它或其他东西?
TextArea ta = TextAreaBuilder.create()
.prefWidth(800)
.prefHeight(600)
.wrapText(true)
.build();
Console console = new Console(ta);
PrintStream ps = new PrintStream(console, true);
System.setOut(ps);
System.setErr(ps);
Scene app = new Scene(ta);
primaryStage.setScene(app);
primaryStage.show();
和类:Console
import java.io.IOException;
import java.io.OutputStream;
import javafx.scene.control.TextArea;
public class Console extends OutputStream
{
private TextArea output;
public Console(TextArea ta)
{
this.output = ta;
}
@Override
public void write(int i) throws IOException
{
output.appendText(String.valueOf((char) i));
}
}
注意:这是基于这个答案的解决方案,我删除了我不关心但未经修改的位(除了从Swing更改为JavaFX),它有相同的结果:数据写入UI元素,屏幕上没有数据显示。