按钮文本随4Gb Ram和IBM Java 1.5消失

时间:2009-02-26 16:22:23

标签: java graphics jdk1.5

我们在开发者网站上发生了一个非常奇怪的错误,我们无法自行复制。

波兰的一位开发人员最近将他的Windows XP Service Pack 3机器升级到了4G的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版本升级到Ram的4Gb时,我自己的机器上不会出现这个问题。

有没有人见过像这样的问题?

为了澄清这一点,这个问题只发生在IBM JDK 1.5上,只有当我们拥有4Gb的Ram时才会发生。它不会发生在任何其他版本的JDK上,如果我们将内存量减少到3 Gb,问题就会消失。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

首先要说明的一件事是:将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决定它在服务器级机器上运行并以更积极的优化运行。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我在拥有3.24 G内存的IBM盒子上有完全相同的东西:所有的swing应用程序都会显示 - 但是文本(在菜单,表单,按钮 - 看似无处不在)都是空白的。

在Sun JDK上运行的相同swing程序没有问题。

我将硬件加速从“完全”降低到“无”(在显示屏上的“高级”即插即用监视器设置中) - 使用英特尔(r)82865G显卡。

现在摆动应用程序工作正常。

好地方......