我知道我可以用这段代码来判断外壳何时关闭,
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");
}
});