2012-04-26 33 views
6

Ai đó có thể làm nổi bật sự khác biệt giữa hai trường hợp này và cả hai trường hợp đều được yêu cầu ?!EventQueue.invokeLater vrs SwingUtilities.invokeLater

Tôi có một ứng dụng sử dụng cả hai intercheably, nhưng muốn biết nếu một là tốt hơn so với khác. Rõ ràng cả hai đều chấp nhận Runnable object, và vì vậy đối với tôi - tôi nghĩ rằng tôi có thể sử dụng cái nào tôi thích.

Tại sao hai hàm này giống nhau trong các lớp khác nhau? Tôi biết một người đang ở trong awt và Swing khác, nhưng họ không làm điều tương tự?

+1

bản sao có thể có của [SwingUtilities.invokeLater() vs EventQueue.invokeLater()] (http://stackoverflow.com/questions/8847083/swingutilities-invokelater-vs-eventqueue-invokelater) – xmedeko

Trả lời

12

SwingUtilities.invokeLater chỉ tồn tại vì EventQueue.invokelater được giới thiệu trong phiên bản 1.2, nhưng Swing đã có sẵn cho 1.1. Swing trong JRE luôn được gọi là phiên bản EventQueue. swingall.jar đã có một số hack nơi nó tạo ra một thành phần, và thực hiện các hoạt động đang chờ xử lý trên repaints.

invokeLater là về số EventQueue. Tôi đề nghị sử dụng phương pháp trực tiếp. SwingUtilities chỉ là một bãi rác. Tôi đã nhìn thấy rất nhiều bằng cách sử dụng SwingUtilities.invokeLater có lẽ trong một số loại niềm tin Swing không phụ thuộc vào AWT.

4

Như được mô tả trong javadoc, chúng giống nhau, ví dụ: một copy-paste từ invokeAndWait phương pháp javadoc

Tính đến 1.3 phương pháp này chỉ là vỏ bọc cho java.awt.EventQueue.invokeAndWait()

Vì vậy, bạn có thể kết hợp chúng và nó không quan trọng bạn sử dụng phiên bản nào.

5

Thực ra mã của SwingUtilities # invokeLater (Runnable doRun) là:

public static void invokeLater(Runnable doRun) { 
    EventQueue.invokeLater(doRun); 
} 

Vì vậy, nó là chính xác những điều tương tự!

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