0

フルスクリーンモードを使いたいのですが、「F」を押すと複雑なエラーが表示され続けます。私は日食を使用していますが、エラーは表示されず、すべてがインポートされます。コードに詳しい人がいたら、私がどこを間違えたのか教えてもらえますか?

コードのスニペット:

GraphicsEnviroment ge = GraphicsEnviroment.getLocalGraphicsEnviroment();
GraphicsDevice gd = ge.GetDefaultScreenDevice();
private boolean FullScreen = false;
JFrame frame = new JFrame(TITLE);

// Not shown: The JFrame is set up etc., and a separate class extends KeyAdapter and runs keyPressed

public void keyPressed(KeyEvent e){
    int key = e.getKeyCode();
        if(key == KeyEvent.VK_F){
        if(!FullScreen){
            if(gd.isFullScreenSupported()){
                frame.setUndecorated(true);
                gd.setFullScreenWindow(frame);
                                    FullScreen = true;
            }
        } else{
            frame.setUndecorated(false);
            gd.setFullScreenWindow(null);
        }
    }

エラー:

Exception in thread "AWT-EventQueue-0" java.awt.IllegalComponentStateException: The frame is displayable.
at java.awt.Frame.setUndecorated(Frame.java:923)
at com.Ward.src.main.Game.keyPressed(Game.java:167)
at com.Ward.src.main.KeyboardInput.keyPressed(KeyboardInput.java:15)
at java.awt.Component.processKeyEvent(Component.java:6463)
at java.awt.Component.processEvent(Component.java:6282)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1895)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:762)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1027)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:899)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:727)
at java.awt.Component.dispatchEventImpl(Component.java:4731)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
4

4 に答える 4

1
frame.dispose(); // Fixes the issue
frame.setUndecorated(true);
frame.setVisible();

この質問は古いことは知っていますが、私はこの問題を自分で扱ったばかりで、解決策はうまくいきます。

于 2016-03-19T22:02:30.883 に答える
0

gd使用するGraphicsEnvironment.getGraphicsEnvironment.getDefaultScreenDevice()前に初期化する必要があります。

更新: OP がこの問題を修正したので、別の問題があります。問題は、undecorated既に表示されているウィンドウのプロパティを変更することです。ウィンドウが表示されている場合、undecoratedオペレーティング システムはウィンドウが表示されている間はプロパティを変更できないため、プロパティを変更することはできません。への呼び出しを省略することでこれを修正できると思いますsetUndecorated。全画面ウィンドウを装飾解除する必要はありません (私は思います)。

于 2013-08-05T22:34:22.790 に答える
0

これは:

if(gd.isFullScreenSupported()){

165行目?もしそうなら、とは何gd setですか?

上記の例外は、エラーが発生したクラス/行番号を示します。null とは何かを理解するには、これで十分です。

于 2013-08-05T22:33:11.020 に答える