gpt4 book ai didi

java - 如果可能,将信息从 Java PrintStream 发送到 JTextPane 的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-30 09:56:14 25 4
gpt4 key购买 nike

在 Java 中,我有一个将 XML 元数据从一种标准转换为另一种标准的包。该包最终通过单个函数访问,并通过 PrintStream 对象发送其所有输出。发送的输出只是每个文件的状态以及是否已翻译。

如果我只是打印到 System.out,这非常好,但我实际上想将它打印到 JTextPane 同时它翻译(有点像进度文本框).在完成 XML 翻译后打印状态并不是什么大问题,但由于可能有数千个 XML 文件,这是不可行的。

我尝试过的一件事是使用一个线程,该线程从 PrintStream(附加到 ByteArrayOutputStream)中获取所有信息,并将任何新信息发送到文本 Pane 。不幸的是,这仍然在翻译结束时一次性发送所有信息。对于 System.out,这确实工作正常。

这是进行翻译并尝试显示输出的代码:

public class ConverterGUI extends javax.swing.JFrame {

boolean printToResultsBox = false;
PrintStream printStream = null;
ByteArrayOutputStream baos = null;

private class ResultsPrinter implements Runnable {

public ResultsPrinter() {
baos = new ByteArrayOutputStream();
printStream = new PrintStream(baos);
}

public void run() {
String tempString = "";
while (printToResultsBox) {
try {
if (!baos.toString().equals(tempString)) {
tempString = baos.toString();
resultsBox.setText(tempString);
}
} catch (Exception ex) {
}
}
}
}

...

ResultsPrinter rp = new ResultsPrinter();
Thread thread = new Thread(rp);
thread.start();

// Do the translation.
try {
printToResultsBox = true;
boolean success = false;
TranslationEngine te = new TranslationEngine();
// fileOrFolderToConvert is a text box in the GUI.
// linkNeeded and destinationFile are just parameters for the translation process.
success = te.translate(fileOrFolderToConvert.getText(), linkNeeded, destinationFile, printStream);
if (success) {
printStream.println("File/folder translation was a success.");
}
resultsBox.setText(baos.toString());
} catch (Exception ex) {
printStream.println("File translation failed.");
} finally {
printToResultsBox = false;
}

...

}

最终,此代码会在所有翻译完成后打印到 JTextPane 中,但不会在翻译期间打印出来。有什么建议么?我是否需要将 PrintStream 更改为其他内容?

最佳答案

线程工作方式的问题在于更新结果框时您不在 UI 事件线程中。看看 SwingWorker类(class)。或者你甚至可以使用 SwingUtilities.invokeAndWait

关于java - 如果可能,将信息从 Java PrintStream 发送到 JTextPane 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2454637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com