当我第一次开始 Java 编程时,您好注意到我们的应用程序中有一些代码。我注意到它从一个单独的线程创建了一个对话框,但从来没有打过眼睑,因为它“似乎工作”。然后我通过我的代码包装了这个方法来显示对话框。
如下:
public class DialogModalVisibleThread
extends Thread {
private JDialog jDialog;
public DialogModalVisibleThread(JDialog dialog, String dialogName) {
this.setName("Set " + dialogName + " Visable");
jDialog = dialog;
}
@Override
public void run() {
jDialog.setVisible(true);
jDialog.requestFocus();
}
}
用法:
WarnUserDifferenceDialog dialog = new WarnUserDifferenceDialog( _tableDifferenceCache.size() );
DialogModalVisibleThread dmvt = new DialogModalVisibleThread( dialog, "Warn User About Report Diffs");
dmvt.start();
现在,据我所知,您永远不应该从单独的线程创建或修改摆动组件。所有更新都必须在事件调度线程上执行。当然这适用于上面的代码?
但是,上面的代码已经工作了。
但最近,出现了无数的重绘问题。例如,单击一个 JButton,然后调用 DialogModalVisibleThread 来显示一个对话框。它导致单击按钮旁边的按钮无法正确重绘。
重绘问题在我的机器上更常见,而不是其他开发人员的机器。另一位开发人员有一台笔记本电脑,其桌面扩展至 21 英寸显示器 - 显示器是他的主显示器。他运行的是 Java 版本 1.6.0_27 的 Windows 7。
我在装有 Windows 7 和 Java 版本 1.6.0_24 的笔记本电脑上运行。我有 2 个额外的显示器,我的桌面延伸到两个显示器上。
与此同时,我将升级到 Java 1.6 update 27。
我想知道上面的代码是否会导致重新绘制问题,或者还有其他人有相关的绘制问题吗?
有没有简单的方法来诊断这些问题?
谢谢