2011-01-05 7 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); 
     } 
    }); 
    } 
} 

私はのWindows7 Professionalの64ビットの下のJava 1.6.0_23を実行しています:

は、ここに私のテストケースです。私のビデオカードは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がトラップになる可能性があり、それを無効にすることが私が探していた解決策でした。私はDirect3Dのいくつかの2Dとフルスクリーンの機能は、信頼性の高いJavaのフルスクリーンの使用と互換性がないと考えています。

いくつかの症状が見られました:全画面の開始時に画面が点滅し、全画面がロックされ、通常のウインドウングに戻るのではなく、全画面の最後にコンポーネントが置換されました。

すべてがこのVMパラメータで解決されました。

ありがとうございますギリ

+0

これは答えですか? –

関連する問題