Tất cả các bức tranh của các thành phần phải được thực hiện trong một chủ đề duy nhất, do đó, chúng được hiển thị đúng cách. Bằng cách đó, thành phần sẽ biết, phần nào đã được sơn và phần nào không có.
Nếu bạn gọi phương pháp liên quan "sơn" (sơn, cập nhật, paintComponent, hiển thị, setVisible, gói, vv) bên ngoài EDT, bạn sẽ cố gắng vẽ theo hai chủ đề khác nhau và có thể gây ra sự cố.
Khi bạn cần sử dụng một chuỗi khác để cập nhật giao diện người dùng, bạn nên gọi nó bằng cơ sở invokeLater, lần lượt sẽ đặt nó trong EDT cho bạn, vì vậy bạn vẫn vẽ trong cùng một chuỗi.
Bạn không cần sử dụng nó, nếu bạn đang mã hóa phương thức chạy trong EDT (ví dụ: actionPerformed
hoặc paint
hoặc một trong số đó) Hoặc nếu bạn đang thực thi mã không liên quan đến giao diện người dùng (đối với Ví dụ, các file xử lý ở chế độ nền, vv)
để hiểu rõ hơn tất cả những khái niệm đọc: The single thread rule
Thực ra phương pháp đó là chính xác cho nhà phát triển ** chứ không phải lo lắng về việc đồng bộ hóa chuỗi, vì bạn chỉ cần cho Swing biết đó là khoảng thời gian cập nhật và công việc nặng được thực hiện sau cảnh. – OscarRyz