gpt4 book ai didi

java - JTextArea线程安全吗?

转载 作者:行者123 更新时间:2023-12-02 11:07:27 24 4
gpt4 key购买 nike

我有一些代码执行一些初始化(包括创建一个 JTextArea 对象),启动三个单独的线程,然后这些线程尝试更新 JTextArea (即 append() 到它),但它根本不起作用。 JTextArea 上没有显示任何内容(但是,在初始化期间,我在其上打印了一些测试行,效果很好)。这是怎么回事?我怎样才能解决这个问题?此外,每个线程每次必须更新 JTextArea 时都会 hibernate 一段随机时间。

抱歉,我没有提供任何代码,它全部分布在多个文件中。

最佳答案

虽然我相信 API 已经声明 JTextArea#append(...) 是线程安全的,但我听说过它存在问题,并且建议仅在 EDT 上调用它。典型的示例是使用 SwingWorker 并通过调用publish 附加到 process 方法中的 JTextArea。

对我来说,即使没有代码,也很难向您提出任何具体建议。我确实想知道您是否将 EDT 置于代码中的某个位置。

编辑:根据您的评论查看本教程:Concurrency in Swing

<小时/>

编辑2:根据Tim Perry的评论,线程安全性的损失及其背后的原因已发布在 this Java bug这与将文本添加到 JTextArea 文档中的这行代码有关:

doc.insertString(doc.getLength(), str, null);

该行分解为两行:

  1. int len=doc.getLength();
  2. doc.insertString(len,str,null);

问题在于,如果文档 doc 在第 1 行和第 2 行之间发生更改,尤其是文档长度,则可能会出现问题。

关于java - JTextArea线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4869027/

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