【问题标题】:JTable inserting data on an auto refresh schemeJTable在自动刷新方案上插入数据
【发布时间】:2011-05-05 07:48:52
【问题描述】:

我有这个 JTable,我在其中实现了自动刷新功能,以每 1 分钟或 (60000l) 显示剩余时间。

但是当要插入的行还没有完成时我遇到了这个问题(数据编码是在 JTable 本身上完成的)数据丢失了。为了防止任何数据丢失,并且不删除自动刷新功能。

是否可以暂停线程(SwingWorker(Void, Void) 用于自动刷新功能)以让插入/更新数据不会丢失?

【问题讨论】:

  • “数据编码在 JTable 本身上完成”是什么意思;这句话看起来像是一种设计气味......你有一些代码给我们看吗?特别是 swingworker 和 table 模型的检查很重要;另外,通常 SwingWorker 只使用一次,似乎不适合您的用例(自动刷新)您如何使用它?
  • 好吧,我在 SwingWorker 中创建了另一个线程(错误)。现在要让它成为一个线程......
  • 当然,您仍然必须记住,对 JTable(或其 TableModel)的更改必须在 EDT 内部执行,因此您的线程必须使用 invokeLater/invokeAndWait 来填充其结果到用户界面。
  • 当我使用 SwingUtilies 时。 run 方法不会触发和冻结应用程序...(抱歉回复晚了。)

标签: java swing jtable swingworker


【解决方案1】:

确保自动刷新和更新发生在同一个线程上。这将阻止自动刷新在当前更新完成之前执行。

事件调度线程 (EDT) 是一个很好的候选者,尤其是 Swing 已经包含在 EDT 上对操作进行排队的框架。

public void autorefresh() {
    SwingUtilities.invokeLater(
       new Runnable() { 
          ...
          // code to request refresh goes here. 
       }
    );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2014-08-11
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    相关资源
    最近更新 更多