2011-03-30 49 views
0

在jnlp應用程序中,我們創建一個從javax.swing.JDialog擴展的模式彈出窗口,並在必要時調用dispose()來隱藏對話框。但是,有時最終客戶會遇到重繪問題。該對話框並不真正消失,其父窗口看起來很亂。我無法複製,但它在最終客戶端PC上發生了很多次。我猜有2個可能的原因:JDialog配置和重繪問題

  • 我們的應用程序中有一個線程直接更新遊標。但是,我無法證明這個線程是問題的根源。
  • 定期地,我們有另一個進程在幾秒鐘內高度使用CPU。我試圖加載CPU,但我無法再重現這個問題。

在這種情況下對我有什麼建議嗎?

謝謝!

+1

「在這種情況下對我有何建議?」我建議你嘗試準備一個顯示相同行爲的[SSCCE](http://pscode.org/sscce.html)(儘管在'隨機錯誤'與'僅出現在另一臺機器上'相結合的情況下, )。這裏只有很少的信息表明問題。 – 2011-03-30 09:20:16

回答

0

它看起來答案是問題;-)

有一個線程(不是EDT)更新UI(光標在你的情況下),可能會導致這樣那樣的問題。

因此,請確保您的線程調用SwingUtilities.invokeLater()(或根據您的需要invokeAndWait())。

另一種可能性(但這很大程度上取決於你的線程做了什麼,沒有你方的進一步描述,很難說)將使用SwingWorker而不是線程。

+0

如何確保線程是我無法重現的根本原因?無論如何強迫這個問題更頻繁發生? – 2011-03-31 10:26:05

+0

不,您很少有機會每次都能重現此類錯誤,因爲它取決於太多無法掌握的因素(通常是CPU負載和線程調度程序)。 – jfpoilpret 2011-04-08 14:15:49