2012-02-07 37 views
19

Tôi đã học gần đây (trong một lớp dựa trên C#) đôi khi được coi là nguy hiểm khi đăng ký trình lắng nghe sự kiện trong một hàm tạo của đối tượng, bởi vì những trình lắng nghe sự kiện đó được đưa ra một tham chiếu đến đối tượng đó trước khi đối tượng được khởi tạo đầy đủ và có thể (ít nhất là về mặt lý thuyết) cố gắng truy cập đối tượng trước khi xây dựng hoàn tất. Từ những gì tôi hiểu, việc truy cập một đối tượng trước khi xây dựng hoàn thành có thể gây ra sự cố, ít nhất bằng một số ngôn ngữ ... nếu nó không gây ra sự cố, thì chúng tôi chỉ quan tâm đến việc đăng ký diễn ra cuối cùng, vì vậy, đối tượng của chúng tôi sẵn sàng nhận các sự kiện khi chúng tôi đăng ký người nghe của mình.Tôi có nên lo lắng về việc rò rỉ con trỏ "này" trong Swing không?

Tôi hiện đang bắt đầu trên một giao diện Swing mới, và nhận thấy rằng thực hành tiêu chuẩn của tôi khi xây dựng GUI Swing là nối dây cho các trình lắng nghe sự kiện trong hàm tạo. Có vẻ như không chắc rằng người nghe sự kiện của các thành phần Swing sẽ được gọi trước khi các nhà xây dựng hoàn thành, vì họ có lẽ không dây cho đến khi thành phần được thêm vào một thùng chứa Swing có thể nhìn thấy, mà chỉ có thể xảy ra sau khi xây dựng.

Vì vậy, có lý do thực sự nào để tránh hình mẫu chống khi làm việc trong Swing không? Và nếu vậy, cách đơn giản nhất để đi về nó là gì?

Trả lời

2

Miễn là bạn chỉ định trình xử lý sự kiện trong chuỗi giao diện người dùng hơn bạn sẽ ổn.

+0

Điều đó có giả định rằng các sự kiện sẽ bắt nguồn từ chuỗi giao diện người dùng không? Điều này thường xảy ra, nhưng không được bảo đảm - có thể có các sự kiện từ bộ tính giờ và nguồn dữ liệu ngoài. – DNA

+0

Không, nhưng nó giả định rằng chuỗi chỉ định trình lắng nghe sự kiện sẽ nằm trên chuỗi giao diện người dùng. –

0

Chắc chắn các nhà xây dựng trong tiêu chuẩn công nghiệp Lập trình Swing thường quá lớn và thừa kế không cần thiết. Vì vậy, miễn là bạn là hợp lý và không đá bất cứ điều gì ra (gây ra các sự kiện được bắn) trước khi xây dựng hoàn tất, bạn sẽ không sao. (Và rõ ràng, hãy giữ cho AWT EDT.)

Các vấn đề liên quan