Текст кнопки исчезает с 4Gb Ram и IBM Java 1.5 - PullRequest
1 голос
/ 26 февраля 2009

На сайте разработчика произошла очень странная ошибка, которую мы не можем скопировать сами.

Разработчик в Польше недавно обновил свой компьютер с Windows XP с пакетом обновления 3 до 4 Гб оперативной памяти. Когда он это сделал, он начал испытывать графические ошибки в Java-программах, использующих IBM JDK 1.5. Эта ошибка возникает только в 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 до 4 Гбайт памяти Ram.

Кто-нибудь еще видел подобную проблему?

Просто чтобы прояснить это немного, эта проблема возникает только с IBM JDK 1.5 и только тогда, когда у нас 4 Гб оперативной памяти. Это не происходит ни в одной другой версии JDK, и если мы уменьшим объем памяти до 3 Гб, проблема исчезнет.

Ответы [ 4 ]

3 голосов
/ 26 февраля 2009

Попробуйте уменьшить аппаратную оптимизацию в графических драйверах Windows (доступно через расширенную панель управления дисплеем). Если рассматриваемая машина имеет встроенный графический адаптер, который использует часть основной памяти, то при обновлении ОЗУ могут возникнуть проблемы в драйвере (или даже ОЗУ может быть неисправно).

1 голос
/ 10 декабря 2009

У меня была точно такая же вещь на коробке IBM с 3,24 ГБ памяти: все приложения Swing отображались бы - но текст (в меню, формах, кнопках - везде, где это кажется) был пустым.

Та же самая программа свинга, работающая на Sun JDK, работала без проблем.

Я уменьшил аппаратное ускорение с «Полное» до «Нет» (в настройках монитора Plug and Play отключено «расширенное» на дисплее) - с использованием графической карты Intel (r) 82865G.

Теперь, похоже, отлично работают приложения Swing.

Хорошее место ...

1 голос
/ 26 февраля 2009

Просто чтобы исключить гипотезу аппаратного сбоя: попросите разработчика проверить его ОЗУ. Memtest86 сделает это.

1 голос
/ 26 февраля 2009

Первое очевидное, что нужно сказать всегда: ограничить использование компонентов 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 решит, что работает на компьютере серверного класса и работает с более агрессивной оптимизацией.

...