我在桌面應用程序中使用了一些第三方AWT組件。該組件的佈局在paint()
方法中發生更改,這會導致一些非常奇怪的行爲。這似乎是通過將關鍵字添加到paint()方法來解決的,但這是一件安全的事情嗎?是否可以安全地同步java.awt.Container.paint(Graphics g)?
2
A
回答
3
看起來paint()
方法在event dispatch thread之外被調用,這確實會導致非常奇怪的行爲,這就是爲什麼永遠不應該這樣做。
相反的paint()
,應用程序代碼應該只調用過repaint()
1
只能在一個線程中調用paint方法,即Event Dispatch Thread,所以不需要同步。我會想象問題的根源在於組件的使用方式。請看this link以瞭解圍繞UI中併發性的一些想法。
相關問題
- 1. protected void paintComponent(Graphics g)
- 2. 你可以調用AudioObjectSetPropertyData是否同步?
- 3. 安全地同步COM線程
- 4. FILTER_VALIDATE_EMAIL是否可以安全地插入數據庫中?
- 5. AUTO_INCREMENT是否可以安全地用於MySQL中的BEFORE TRIGGER中
- 6. 是否可以安全地從memcached中刪除數據?
- 7. 是否可以安全地取消引用字符串
- 8. 是否可以安全地從函數中返回一個TCHAR *
- 9. 是否可以「安全地」清零Golang字符串的內存?
- 10. jQuery是否可以安全地迭代$ .get()?
- 11. 是否可以同時從多個線程調用write()安全?
- 12. 同步框架:我是否可以同步存儲過程
- 13. 從另一個同步方法調用同步方法是否安全?
- 14. 使stringWithContentsOfURL異步 - 是否安全?
- 15. gc.log是否寫異步?安全地把NFS掛載gc.log?
- 16. 是可重入鎖是否完全替換同步?
- 17. public void paintComponent(Graphics g)not working
- 18. 線程同步是否意味着線程安全?
- 19. 將Mat安全地轉換爲不同類型的自己是否安全?
- 20. 什麼是彈性搜索,是否可以安全地刪除logstash?
- 21. 我是否安全地使用Html.Raw()?
- 22. 安全地檢查'this`是否爲空
- 23. 是否安全地存儲getContext的值
- 24. 這個地圖擦除是否安全?
- 25. 何時可以安全地提交FragmentTransaction?
- 26. 我可以安全地使用域URI
- 27. 可以將Parallel.ForEach安全地用於CloudTableQuery
- 28. 可以安全地應用補丁嗎?
- 29. 是否可以安裝iAMP?
- 30. idToken是否安全地通過API的非安全URL發送?
謝謝邁克爾。 'paint(Graphics)'正在從'update(Graphics)'被調用。我改變了'update()',所以它現在調用'repaint()',它似乎工作到目前爲止...... – Armand 2010-05-18 11:37:12
@Michael任何想法,如果可以從'update(Graphics)'調用'repaint()'是安全的? – Armand 2010-05-18 14:06:15
@Alison:調用repaint()是安全的,因爲它基本上只是將一個事件放入EDT隊列中,該隊列已正確同步。 – 2010-05-18 14:19:18