SwingWorker
được sử dụng cho các mục đích sau:Java - Sự khác nhau giữa SwingWorker và SwingUtilities.invokeLater()
- Ví chạy nhiệm vụ lâu dài trong một chủ đề khác nhau để ngăn chặn sự GUI từ việc không đáp ứng
- Để cập nhật GUI với kết quả được tạo bởi tác vụ dài hạn ở cuối nhiệm vụ thông qua phương thức
done()
. - Để cập nhật GUI theo thời gian với kết quả trung gian được tạo và xuất bản bởi tác vụ với sự trợ giúp của các phương thức
publish()
vàprocess()
.
SwingUtilities.invokeLater()
có thể thực hiện các nhiệm vụ trên như sau:
- Thay vì thực hiện phương pháp
SwingWorker.execute()
từ EDT, chúng ta có thể thực hiệnExecutorService.submit(new MyRunnable())
vì nó cũng sẽ tạo ra một thread mà có thể thực hiện nhiệm vụ kéo dài. - Để cập nhật GUI khi kết thúc tác vụ, chúng tôi có thể đặt mã (được viết theo phương thức
done()
của case1)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode())
ở cuối tác vụ. - Để cập nhật GUI ở giữa nhiệm vụ, chúng tôi có thể đặt mã (viết bằng
process()
phương pháp case1)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())
tại nơi chúng tôi gọi phương thứcpublish()
trong trường hợp 1.
Tôi hỏi câu hỏi này vì vấn đề nêu trong câu hỏi Java - SwingWorker - Can we call one SwingWorker from other SwingWorker instead of EDT có thể được giải quyết bằng cách SwingUtilities.invokeLater()
nhưng không thể được giải quyết với SwingWorker
Tôi không hoàn toàn chắc chắn về 'câu hỏi' là. – akf
@akf nếu bạn không chắc chắn, sau đó rời khỏi nó. Đơn giản :) –
Sự cố bạn đề cập đến có thể giải quyết được bằng cách sử dụng SwingWorker. Xem câu trả lời của tôi ở đó. –