...好的,我解决了。
问题是操作系统窗口管理器可能会执行一些动画或一些东西来最大化外壳,所以我很早就开始阅读新的外壳几何。我也在处理外壳时正在做它......
所以我就这样解决了。在处置事件句柄时,我设置了 event.doit = false 以防止在我读取大小时处置我的外壳。然后我使用 Timer 让操作系统窗口管理器在读取未最大化的大小之前完成它的工作,最后我手动处理 shell:
shell.setMaximized(false);
final Timer t = new Timer();
t.schedule(new TimerTask() {
@Override
public void run() {
display.asyncExec(new Runnable() {
@Override
public void run() {
t.cancel();
Rectangle r = shell.getBounds();
// ... do something with r
shell.dispose();
}
});
}
}, 1000);
好吧,也许这不是最优雅的方式,但它最终会奏效。欢迎任何更优雅的解决方案!:)