代码之家  ›  专栏  ›  技术社区  ›  Jimoc

按钮文本消失与4GB RAM和IBM Java 1.5

  •  1
  • Jimoc  · 技术社区  · 17 年前

    我们在开发人员站点上发生了一个非常奇怪的错误,我们无法复制自己。

    波兰的一位开发人员最近将他的Windows XP Service Pack 3计算机升级为4GB RAM。 当他这样做时,他开始使用IBM JDK 1.5在Java程序中经历图形错误。 此错误仅出现在IBM JDK 1.5中,而不出现在任何其他版本中。

    当您在窗体上创建按钮或控件并将鼠标移到它上面时,问题就会显现出来。

    我们有一个测试程序

    import java.awt.FlowLayout;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    public class GraphicTest {
        public static void main(String args[]) {
            JFrame frame = new JFrame("GraphicTest");
            frame.getContentPane().setLayout(new FlowLayout());
            frame.setSize(200, 200);
            JButton button = new JButton("Test button");
            button.setVisible(true);
            frame.getContentPane().add(button);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
    

    这就直接说明了问题所在。

    但是,当我将同一个Windows版本升级到4GB RAM时,我自己的计算机上不会出现这个问题。

    有人见过这样的问题吗?

    只是稍微澄清一下,这个问题只在IBMJDK1.5中发生,只有在我们有4GB的RAM时才会发生。它不会发生在任何其他版本的JDK上,如果我们将内存量减少到3GB,问题就会消失。

    4 回复  |  直到 16 年前
        1
  •  3
  •   Michael Borgwardt    17 年前

    尝试减少Windows图形驱动程序中的硬件优化(可通过扩展显示控制面板访问)。如果问题机器有一个使用部分主内存的板载图形适配器,那么升级RAM可能会暴露驱动程序中的问题(或者RAM甚至可能有故障)。

        2
  •  1
  •   Michael Myers KitsuneYMG    17 年前

    首先要说的是:将Swing组件的使用限制在awt事件调度线程(edt)中。

    public class GraphicTest {
        public static void main(final String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    runEDT();
                }
            });
        }
        private static void runEDT() {
            assert java.awt.EventQueue.isDispatchThread();
            JFrame frame = new JFrame("GraphicTest");
            ...
    

    我不知道为什么记忆的大小很重要。也许它在某种程度上影响了时间。也许JVM决定它在服务器类机器上运行,并以更积极的优化方式运行。

        3
  •  1
  •   Olivier    17 年前

    只是为了排除硬件故障假设:让开发人员测试他的RAM。 Memtest86 会这样做。

        4
  •  1
  •   monojohnny    16 年前

    我在一个内存为3.24克的IBMBox上也有同样的功能:所有的Swing应用程序都会显示,但文本(在菜单、窗体、按钮上,无论在哪里)都是空白的。

    在Sun JDK上运行的同一个Swing程序没有问题。

    我使用Intel(R)82865G图形卡将硬件加速从“完全”降低到“无”(即插即用显示器设置为“高级”)。

    现在,Swing应用程序似乎工作得很好。

    好点…