【问题标题】:Print transaction status on TextArea在 TextArea 上打印交易状态
【发布时间】:2013-08-26 10:57:34
【问题描述】:

我正在开发一个项目,它执行以下操作:

1.截断一个临时表T1。

2.在临时表 T1 中插入几千行。

3.执行一个包含一些提交语句的过程。

4.将表 T1 中的行插入其他相同的表(相对于结构)T2

5.再执行2个程序。

现在我制作了一个包含 TextArea 的摇摆 UI,我想在该 UI 上打印交易状态。像这样的

正在读取 Excel 文件.. 验证 Excel 文件.. 将条目插入表 T1.. 等等

我做了以下方法来更新每一步的状态。

public void updateStatus(String message){
        String temp = this.statusText.getText();
        this.statusText.setText(temp  + message +  "\n");
}

在我做的语句中调用这个方法

log.debug(message) 为我完成了这项工作!然而,这使我的代码设计复杂化。现在每个 DAO 组件都依赖于这个方法。谁能给我推荐一个更好的设计方案。

提前致谢!

【问题讨论】:

    标签: java swing design-patterns


    【解决方案1】:

    log.debug(message) 为我完成了这项工作!然而,这使我的 代码设计。现在每个 DAO 组件都依赖于这个方法。能 任何人都建议我一个更好的设计选择。

    • Concurency in Swing 有问题,请换行 statusText.append(message + "\n");给invokeLater

    • Swing 是单线程的,对已经可见的 Swing GUI 的所有更新都必须在 Event Dispatch Thread

    • 上完成
    • 也许你可以看看SwingWorker,从发布的描述中看不清楚,只是这可能很难长期运行,谈论 EDT 问题

    • 减少处理器消耗并使用适当的方法将新的String 附加到已经可见的JTextArea,使用statusText.append(message + "\n"); 而不是非常困难

    .

    String temp = this.statusText.getText(); // take all string from JTextArea
    this.statusText.setText(temp  + message +  "\n"); // append() a new line to 
    

    【讨论】:

    • Swing worker 似乎是一个不错的选择。但是,在我的情况下,一次只能运行一个 Program 实例。在那种情况下,我应该选择 Swing Worker 吗??
    • 是 SwingWorker 默认不可重用,可共享,新运行等于新实例
    猜你喜欢
    • 1970-01-01
    • 2014-01-24
    • 2022-10-02
    • 2018-09-21
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多