首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JTextPane活动

JTextPane活动
EN

Stack Overflow用户
提问于 2012-02-10 15:59:12
回答 2查看 77关注 0票数 3

当按下JButton时,我的Swing应用程序将文本行打印到JScrollPane中的JTextPane。对于快速操作,没有问题。但是,某些JButtons会调用可能需要几分钟时间的操作。在此期间,该按钮将呈灰色显示。

当前发生的情况是文本被“批处理”,然后在操作结束的同时按钮变灰的同时,我得到了数百行代码。问题是,我希望追加到JTextPane中显示的文档的文本更早(在追加时)出现,而不是在整个操作完成时出现。这将创造更好的用户体验。

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-10 16:07:33

使用SwingWorker执行后台操作。

代码语言:javascript
复制
// Your button handler
public void actionPerformed(ActionEvent e) {
  (new SwingWorker<Void, String>() {
    public Void doInBackground() {
      // perform your operation
      // invoke publish("your string");
    }

    protected void process(List<String> chunks) {
      // append your string to the scroll pane
    }
  }).execute();
}
票数 2
EN

Stack Overflow用户

发布于 2012-02-10 16:05:18

您直接从阻塞每个事件的AWT-Thread中调用代码。解决方案是将长时间运行的代码放在单独的Thread中。当您的代码被执行并获得结果时,您将通知您的视图(使用观察者/可观察模式).As您的视图将被通知,您将更新滚动窗格的内容。

您还必须验证是否在AWT线程中运行(SwingUtilities.isEventDispatchThread())。如果不是,则需要使用SwingUtilities.invokeLater()分派AWT-Thread中的视图更新,因为Swing不是线程安全的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9224508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档