2009-02-26 2 views
1

우리는 스스로 복제 할 수없는 개발자 사이트에서 매우 이상한 오류가 발생했습니다.4Gb RAM 및 IBM Java 1.5로 사라지는 버튼 텍스트

그가 그렇게했을 때 그는 단지 IBM JDK 1.5가 아닌 발생 IBM JDK 1.5 이 오류를 사용하여 자바 프로그램에서 그래픽 오류가 발생하기 시작 폴란드에서 개발자는 최근 램 4GB의 자신의 Windows XP 서비스 팩 3 컴퓨터를 업그레이드했다 다른 버전에서는.

폼에 단추 나 컨트롤을 만들고 마우스를 폼 위로 이동하면이 문제가 나타납니다.

우리는 바로이 문제를 보여주는 테스트 프로그램을

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 램으로 업그레이드 할 때 문제가 발생하지 않습니다.

누구도 이와 같은 문제를 겪었습니까?

이 점을 약간 명확히하기 위해이 문제는 IBM JDK 1.5에서만 발생하며 4GB RAM이있는 경우에만 발생합니다. JDK의 다른 버전에서는 발생하지 않으며 메모리 양을 3GB로 줄이면 문제가 사라집니다.

+0

99.99 % 신뢰도로 RAM이 아니라고 말할 수 있습니다. –

+0

이 코드는 Java에서 * only *, IBM JDK에서 * only *, * 1.5 *와 * 만 * 존재하는지 확인하기 위해 실제로 범위를 좁혔습니까? –

+0

RAM (가망없는 것)이라는 가정을 테스트하는 쉬운 방법은 RAM을 제거하고 다시 시도하는 것입니다. 내 생각에 같은 시간에 바뀐 것은 더 미묘한 것이 었습니다. – Beska

답변

3

Windows의 그래픽 드라이버 (확장 디스플레이 제어판을 통해 액세스 가능)에서 하드웨어 최적화를 줄여보십시오. 해당 컴퓨터에 메인 메모리의 일부를 사용하는 온보드 그래픽 어댑터가있는 경우 RAM을 업그레이드하면 드라이버에 문제가 발생할 수 있습니다 (또는 RAM에 오류가있을 수 있음).

+0

이것은 정확히 문제였으며, 두 개발자 모두 동일한 그래픽 칩셋, Intel G31/G33 칩셋을 사용했으며 그래픽 가속 기능이 사라진 그래픽 가속기가 사라졌습니다. – Jimoc

+0

그래픽 드라이버를 업데이트하여 문제를 해결할 수 있습니다. –

+0

최신 그래픽 드라이버를 사용해 보았지만 여전히 오류가 발생합니다. 나는 그들이 액셀러레이터에서 발을 떼거나 새로운 카드를 얻어야한다고 생각한다. 모든 도움에 감사드립니다. – Jimoc

1

항상 말해야 할 첫 번째 분명한 사실은 AWT Event Dispatch Thread (EDT)에 Swing 구성 요소 사용을 한정한다는 것입니다.

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

하드웨어 고장 가설을 배제하기 위해 개발자가 RAM을 테스트하도록하십시오. Memtest86이 작업을 수행합니다.

+0

우리는 개발자가 2 개의 다른 기계를 사용하도록했습니다. 두 기계 모두 다른 기계의 메모리를 사용하고, 두 경우 모두 동일한 문제를 보았습니다.하지만 우리 사무실의 기계에서는 재현 할 수 없습니다. – Jimoc

1

메모리 상자가 3.24G 인 IBM 상자에는 똑같은 내용이 있습니다. 모든 스윙 응용 프로그램이 표시되지만 메뉴, 양식, 단추의 텍스트는 공백으로 표시됩니다.

Sun JDK에서 실행되는 동일한 스윙 프로그램이 아무런 문제가되지 않았습니다.

Intel 82865G 그래픽 카드를 사용하여 'Full'에서 'None'(디스플레이의 '고급 설정'에서 플러그 앤 플레이 모니터 설정 해제)으로 하드웨어 가속을 줄였습니다.

이제 스윙 앱이 제대로 작동합니다.

좋은 자리 ...

관련 문제