Như hầu hết các lập trình viên Java biết, cập nhật đối với Swing GUI chỉ nên được thực hiện trên chuỗi gửi sự kiện AWT và đề xuất là các quy trình chạy dài được thực thi trên luồng "công nhân" với các bản cập nhật được gửi đến chuỗi gửi sự kiện bằng cách sử dụng SwingUtilities.invokeAndWait()
hoặc SwingUtilities.invokeLater()
.Mẫu để chặn người dùng Java Swing trong chuỗi công nhân
Làm cách nào để ngăn người dùng tiếp tục với ứng dụng trong khi quá trình chạy dài được hoàn tất? Bạn có tô xám các điều khiển và sau đó yêu cầu chuỗi công nhân có thể bật lại chúng bằng cách sử dụng các cuộc gọi SwingUtilities
được đề cập ở trên không?
Có mẫu thay thế nào tốt hơn không?
Tại sao bạn cần cấm người dùng sử dụng ứng dụng?Nếu có thể bạn muốn tránh làm điều đó và cho phép họ tiếp tục. Nếu bạn hoàn toàn phải, mặc dù, những gì về một hộp thoại phương thức? Bạn cũng có thể tắt các điều khiển. – justkt
Câu hỏi hay. Tôi không biết bất kỳ câu trả lời tiêu chuẩn nào ngoại trừ ProgressMonitor. – keuleJ
@justkt: Nếu quá trình chạy dài ảnh hưởng đến điều đang hiển thị, tôi có thể không muốn người dùng làm bất cứ điều gì khác, ngoại trừ có thể hủy hoạt động. Những gì tôi thường làm là một hộp thoại phương thức với các nút, vv vô hiệu hóa ngoại trừ nút "Hủy bỏ", nhưng tôi hy vọng cho một mô hình tổng quát hơn. Màn hình tiến bộ của – Ralph