我有一个 JOptionPane,其中有一个自定义消息面板,位于面向 Java 1.5 的应用程序中。除其他内容外,该面板还包含一个 JTextField。每调用 20 次左右,对话框中就不会绘制任何内容(甚至“确定”/“取消”按钮也不会绘制)。如果我将对话框拖离屏幕并再次拖回以强制重新绘制,则组件将按预期可见,并且除了绘制问题外,组件响应良好。这是我能展示此错误的最小示例:
public class BugTest {
public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// The text field needs to be wrapped in a panel for the bug to show up.
JPanel messagePanel = new JPanel();
// A JLabel won't exhibit the bug, but a JTextField will.
JTextField textField = new JTextField("Some content");
messagePanel.add(textField);
// Loop so we can keep clicking OK until the bug shows up.
while (true) {
int res = JOptionPane.showOptionDialog(null, messagePanel,
"SomeTitle", JOptionPane.OK_CANCEL_OPTION,
JOptionPane.PLAIN_MESSAGE, null, null, null);
}
}
});
}
}
这是 Swing 中的一个众所周知的错误吗?有标准的解决方法吗?我还没有找到这方面的官方错误报告。该错误似乎在 Java 1.7 中不存在,但我的应用程序需要在较旧的 1.5 上运行,并且我希望找到适用于后者的解决方法。
有关的:无模式 JDialog 不显示内容 https://stackoverflow.com/questions/5362090/modeless-jdialog-not-showing-contents(不包含代码示例,因此很难知道是否是同一个错误)
我发现该错误的具体 Java 版本是 1.5.0_22。
这个错误似乎可以在 Windows Vista 和 XP 上运行的 Java 1.5 到 Java 7 上重现(也可能在 Win7 上)
看一看在这个错误报告中 https://bugs.java.com/bugdatabase/view_bug?bug_id=6859086(错误号:6859086)
该问题最可能的原因是 GDI 资源泄漏。看看
您可以使用以下任一方法跟踪 java 进程消耗的 GDI 资源
任务管理器或流程浏览器。
编辑:根据错误报告,解决方法不可用,但您可以尝试使用几个运行时选项:
-Dswing.handleTopLevelPaint=false
-Dsun.java2d.d3d=true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)