Display.getActiveShell()
似乎只有在集中注意力时才认为 Shell 是活动的。如果此时另一个应用程序具有焦点,则意味着Display.getActiveShell()
返回null
。
我需要一种方法,它总是会告诉我哪个是 Shell 关注我的 SWT 应用程序,即使我的 SWT 应用程序没有关注焦点。
我很快就将这段代码破解了,尽管有时我会得到AssertionException
:
public static Shell getActiveShell() {
Display display = Display.getDefault();
Shell result = display.getActiveShell();
if (result == null) {
Shell[] shells = display.getShells();
for (Shell shell : shells) {
if (shell.getShells().length == 0) {
if (result != null)
throw new AssertionException();
result = shell;
}
}
}
return result;
}
除了编写自己的方法之外,还有什么标准方法可以解决这个问题吗?