如何判断SWTShell是以编程方式关闭的还是由用户关闭的



我知道我可以用这段代码来判断外壳何时关闭,

shell.addShellListener(new ShellAdapter()
{
    @Override
    public void shellClosed(ShellEvent e)
    {
        System.out.println("closed");
    }
}

但是ShellEvent对象并没有告诉我Shell是以编程方式关闭的,还是用户单击X按钮时关闭的。

有办法告诉你吗?

我花了一些时间来区分Close ShellEvent是由用户还是系统生成的。

在两种情况下检查ShelEvent后,通过ShellEvent的ObjectGraph,唯一具有不同值的变量是Display类中的captureChanged,其范围为default

下面的代码应该可以帮助您找到ShellEvent 的来源

shell.addShellListener(new ShellAdapter() {
        @Override
        public void shellClosed(ShellEvent e) {
                Field f = Display.class.getDeclaredField("captureChanged");
                f.setAccessible(true);
                System.out.println("captureChanged = " + f.get(e.display)); //true = If User triggered the Event
                System.out.println("closed");
        }
    });

相关内容

  • 没有找到相关文章

最新更新