2011-01-05 2 views
0

Я могу использовать полноэкранный эксклюзивный режим с обычными компонентами Swing, но по какой-то причине, когда я использую компоненты AWT, я вижу только черный экран в полноэкранном режиме. В Windows7, если я переключаюсь от окна (ALT-TAB), я вижу, что предварительный просмотр/эскиз окна отображается правильно. После переключения обратно в приложение я снова получаю черный экран.AWT компоненты в полноэкранном эксклюзивном режиме

Вот мой тест-случай:

import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.EventQueue; 
import java.awt.GraphicsDevice; 
import java.awt.GraphicsEnvironment; 
import javax.swing.JFrame; 

public class TestMain 
{ 
    public static void main(String[] arg) 
    { 
    EventQueue.invokeLater(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
     final GraphicsDevice screen = GraphicsEnvironment.getLocalGraphicsEnvironment(). 
      getDefaultScreenDevice(); 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().setBackground(Color.BLUE); 
     frame.getContentPane().setLayout(null); 
     frame.setUndecorated(true); 

     Canvas canvas = new Canvas(); 
     canvas.setBackground(Color.RED); 
     canvas.setBounds(10, 10, 100, 100); 
     frame.getContentPane().add(canvas); 

     System.out.println("isFullscreenSupported=" + screen.isFullScreenSupported()); 
     screen.setFullScreenWindow(frame); 
     } 
    }); 
    } 
} 

Я бегу Java 1.6.0_23 под Windows7 Professional 64-бит. Моя видеокарта ATI Radeon HD 4600. Есть ли что-то не так с моим кодом? Моя видеокарта? Сам JDK?

ответ

2

Отключение трубопровода Direct3D (-Dsun.java2d.d3d=false) устраняет проблему для меня. Я подал сообщение об ошибке в отношении JDK: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7010551

+0

В типичной форме Sun/Oracle отчет об ошибке больше не доступен для публики. Я даже не знаю, почему. – Gili

0

Я подтверждаю: на многих компьютерах, которые я пытался, DirectX/Direct3D может быть ловушкой, и отключение было именно тем решением, которое я искал. Я думаю, что некоторые 2D и полноэкранные функции Direct3D несовместимы с надежным использованием Java на весь экран.

Я заметил несколько симптомов: мигающий экран при запуске полноэкранного режима, блокировка полного экрана, замена компонентов в конце полного экрана, а не возврат к нормальному окну ...!

Все было решено с помощью этого параметра VM.

Большое спасибо Gili

+0

Это ответ ...? –