Performance JDialog处理和重新绘制问题

Performance JDialog处理和重新绘制问题,performance,swing,concurrency,repaint,jdialog,Performance,Swing,Concurrency,Repaint,Jdialog,在jnlp应用程序中,我们从javax.swing.JDialog创建一个模式弹出窗口,并在必要时调用dispose()隐藏对话框。然而,有时最终客户机会遇到重新绘制问题。对话框并没有真正消失,它的父窗口看起来很混乱。我无法复制,但它在最终客户端PC上发生了很多次。我想可能有两个原因: 我们的应用程序中有一个线程直接更新游标。然而,我无法证明这个线程是问题的根本原因 每隔几秒钟,我们就会有另一个进程高度使用CPU。我试图加载CPU,但也无法重现该问题 在这种情况下有什么建议吗 谢谢 答案似乎

在jnlp应用程序中,我们从javax.swing.JDialog创建一个模式弹出窗口,并在必要时调用dispose()隐藏对话框。然而,有时最终客户机会遇到重新绘制问题。对话框并没有真正消失,它的父窗口看起来很混乱。我无法复制,但它在最终客户端PC上发生了很多次。我想可能有两个原因:

  • 我们的应用程序中有一个线程直接更新游标。然而,我无法证明这个线程是问题的根本原因
  • 每隔几秒钟,我们就会有另一个进程高度使用CPU。我试图加载CPU,但也无法重现该问题

在这种情况下有什么建议吗


谢谢

答案似乎在问题中;-)

使用线程(而不是EDT)更新UI(您的情况下的光标)可能会导致此类问题

因此,请确保线程调用
SwingUtilities.invokeLater()
(或
invokeAndWait()
,具体取决于您的需要)


另一种可能性(但这在很大程度上取决于你的线程所做的事情,没有你这边的进一步描述,很难说)是使用
SwingWorker
而不是线程。

“在这种情况下有什么建议吗?”我建议你试着准备一个显示相同行为的线程(尽管在“随机错误”与“仅出现在另一台机器上”相结合的情况下很棘手)。这里很少有信息表明问题。我如何确保线程是根本原因,而我无法复制?是否有任何方法迫使问题更频繁地发生?不,你几乎不可能每次都复制这种错误,因为它取决于太多无法掌握的因素(通常是CPU负载和线程调度程序)。