【问题标题】:How can I tell if a widget is still active and not disposed?如何判断小部件是否仍处于活动状态且未处置?
【发布时间】:2012-10-29 16:56:26
【问题描述】:

A 类中的方法 A(非 GUI)

public void add() {
   if(etc...) {
      add data to a arraylist ..... 
   }
   Class B.updateTable();
 }

上面的方法基本上是在一个arraylist中添加数据,然后更新b类中的tableViewer。

B 类 - GUI 对话框

在调用 Class B.updateTable() 之前,我想检查并确保 Class B 的 GUI 已打开且未释放。

用户可以在不打开 B 类 GUI 的情况下使用 A 类(非 gui)。因为 A 类构建了一个用户选择的 ArrayList,而 B 类显示了它。因此,他们可以添加数据而无需尝试显示它。

如果我当前运行 B.updateTable() 并且 B 类未打开,则会收到小部件处置错误。

如果我可以添加一个检查并确保在我尝试更新表格之前没有释放小部件。

我可以检查 A 类的值还是需要编写一个静态布尔方法是 B 类,它返回类似 shell.isDisposed 的东西?

然后在 A 类方法中,我可以添加检查。

  public void add() {
     if(etc...) {
        add data to a arraylist ..... 
     }
     if(!Class B.isShellDisposed()) {       
        Class B.updateTable();
     }
  }

这是可能的,甚至是处理错误的正确方法吗?

【问题讨论】:

  • 我的问题是在 gui 中刷新我的表格查看器。因此,当我向数组列表添加数据时,我同时刷新了表格查看器。只要打开 GUI,它就可以很好地工作。但如果 GUI 已关闭,我会在刷新时遇到错误。我发现即使对话框关闭,表格查看器也不为空。所以刷新试图刷新一些不存在的东西。所以在关闭按钮代码中,我添加了 viewer = null;这似乎解决了问题
  • 然后继续创建答案。你应该可以在几天内接受它。

标签: java swt dispose jface


【解决方案1】:

我遇到的问题是在 GUI 关闭时刷新表查看器。当我的用户关闭 GUI 以通过主应用程序向数组列表添加更多数据时。我在 add 方法中有代码来刷新 GUI 中的表查看器。主要问题是即使关闭了 GUI,表格查看器也不为空。所以我的代码试图刷新已经处理的东西。知道当 GUI 关闭时我不需要刷新表查看器。我在关闭按钮代码中将表格查看器设置为空。然后在更新方法中检查查看器是否为 null。

static public void updateTableViewer() {

  if(getViewer() != null) {
     viewer.refresh();
  }
}

所以现在当 GUI 关闭时,表查看器为 NULL,而当它打开时,表查看器不为空。这似乎对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-30
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多