Display.getActiveShell()
dường như chỉ xem xét Shell hoạt động nếu nó tập trung. Nếu tại thời điểm này ứng dụng khác có tiêu điểm có nghĩa là Display.getActiveShell()
sẽ trả về null
.Nhận Active Shell trong SWT, ngay cả khi Shell không nằm trên tiêu điểm
Tôi cần một phương pháp luôn cho tôi biết Shell đang tập trung vào ứng dụng SWT của tôi, ngay cả khi ứng dụng SWT của tôi không tập trung.
tôi đã nhanh chóng bị hack đoạn mã này với nhau, mặc dù đôi khi tôi nhận được một 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;
}
Có cách nào tiêu chuẩn để tiếp cận vấn đề này khác hơn là viết phương pháp riêng của bạn?
_ "Tôi cần một phương pháp luôn cho tôi biết Shell đang tập trung vào ứng dụng SWT của tôi, ngay cả khi ứng dụng SWT của tôi không tập trung." _ Phần thứ hai là mâu thuẫn đầu tiên. Bạn có thể làm rõ? – Baz
Một điều là phải có một vỏ tập trung vào bối cảnh của ứng dụng của tôi, một điều nữa là để có ứng dụng swt của tôi tập trung! –
Không có trọng tâm trong ứng dụng của bạn nếu bản thân ứng dụng không có tiêu điểm. – Baz