如何判断窗口小部件是否仍处于活动状态且未处理?

时间:2012-10-29 16:56:27

标签: java swt dispose jface

A类方法A(非GUI)

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

上面的方法基本上将数据添加到arraylist,然后更新b类中的tableViewer。

B类 - GUI对话

在我调用类B.updateTable()之前,我想检查并确保B类的GUI是开放的而不是处理。

用户可以使用A类(非gui)而不打开B类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();
     }
  }

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

1 个答案:

答案 0 :(得分:0)

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

static public void updateTableViewer() {

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

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