我有一個Swing應用程序,帶有某種重繪問題。當屏幕(JFrame)被關閉時,來自該屏幕的人爲痕跡有時被繪製在其他屏幕上。在我們的辦公室的100多臺開發人員機器以及使用該軟件的成千上萬的用戶中,絕大多數是不可複製的。過去幾年來,這個問題已經有零星報道,但我們一直都在指責顯卡或驅動程序。儘管如此,在過去的幾個月裏,這個問題的報道數量急劇上升,因此我們需要找出真正的原因。Java Swing屏幕文物
幾乎我們所有的客戶端都運行在Windows上,它同時影響Windows 7和8機器。我們通常在JRE 1.6.0_29上運行,但該問題也發生在1.6.0_45和1.7.0_51上。
下面的圖片說明了這個問題。我用紅色標出了神器 - 這是另一個已關閉的JFrame的一部分。當JFrame可見時,它不在屏幕上的那個位置。還要注意,工件之上的JTable的列不符合要求。最後,請注意,工件不是繪製在JTable上方,而是繪製在其父級JScrollPane和位於屏幕底部的單獨JPanel上。
有人有什麼想法可能會導致此?
發生什麼情況,當您調整剩餘窗口大小時,觸發重繪?此外,工件組件是否可點擊或以任何方式響應用戶交互? – LuigiEdlCarno
您是否有關於發生此錯誤的機器的更多信息?特別是,顯卡類型(供應商,可能還有驅動版本)?或者在發生此錯誤時在後臺運行的任何第三方軟件?事實上,它發生在不同的操作系統和不同的JRE上,這表明這些機器必須有其他共同的東西導致此錯誤。 – Marco13
@LuigiEdlCarno調整窗口大小會觸發重繪,並且工件消失。工件組件不響應用戶交互。如果你點擊它們(在屏幕截圖的情況下),它將選擇底層JTable中該位置的那一行,並且該行將被重新繪製。 – Jason