2009-02-26 4 views
1

У нас очень странная ошибка на сайте разработчика, которую мы не можем воспроизвести.Текст кнопки исчезает с 4Gb Ram и IBM Java 1.5

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

Неужели кто-нибудь еще видел такую ​​проблему?

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

+0

Я могу сказать с уверенностью 99,99%, что это не ОЗУ. –

+0

Вы действительно сузили его, чтобы убедиться, что это * только * происходит на Java и * только * с IBM JDK и * только * с 1,5? –

+0

Простой способ проверить предположение, что это ОЗУ (что кажется маловероятным), было бы просто удалить ОЗУ и повторить попытку. Я предполагаю, что это нечто более тонкое, которое изменилось в одно и то же время. – Beska

ответ

3

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

+0

Оказывается, это была именно проблема, у обоих разработчиков был тот же графический чипсет, набор микросхем Intel G31/G33 и аппаратное ускорение, отклоненное от графических проблем, исчезло. – Jimoc

+0

Возможно, устранить проблему можно, обновив драйверы графики. –

+0

Мы попробовали это с последними графическими драйверами и все еще ошибка. Я думаю, им просто нужно либо оставить ногу с акселератора, либо получить новую карту. Спасибо за помощь. – Jimoc

1

Первой очевидной вещью, которую нужно всегда говорить, является: Запретить использование компонентов Swing для передачи событий AWT Event Dispatch Thread (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 решает, что он работает на машине серверного класса и работает с более агрессивной оптимизацией.

+0

Другими словами, вы считаете, что это может быть исправлено путем извлечения метода createAndShowGui() и выполнения invokeLater()? –

1

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

+0

У нас есть разработчик, который использует две разные машины, обе машины используют память из другой, и в обоих случаях они видят одну и ту же проблему, но мы не можем воспроизвести ее на машинах в нашем собственном офисе. – Jimoc

1

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

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

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

Теперь работа с swing работает просто отлично.

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