キャンバス上に何かを描画してJFrameに追加し、このJFrameをフルスクリーンに設定しようとしています。私の問題はフルスクリーンモードでは黒い画面しか見えません。 画面が黒くなる前に、私はちょうどキャンバスのピンクの背景を見ることができます。Java - JFrameをフルスクリーンに設定すると、画面が黒くなる
JFrameに直接描画し、それをフルスクリーンに設定すると完全に正常に動作し、テストテキストが表示されます。私はCanvasを正しく表示することに問題があると仮定します。ここで
は私のコードです:
//graphicsDevice = GraphicsEnvironment.getLocalGraphicsEnvironment()
// .getDefaultScreenDevice();
public void setFullScreen(DisplayMode dm, JFrame window){
window.setUndecorated(true);
window.setResizable(false);
graphicsDevice.setFullScreenWindow(window);
if(dm != null && graphicsDevice.isDisplayChangeSupported()){
graphicsDevice.setDisplayMode(dm);
}
}
私がいない理由を誰もが手掛かりを持っています。ここでは
public class FullscreenTest extends Canvas {
private JFrame mainFrame;
public FullscreenTest(){
this.mainFrame = new JFrame();
JPanel contentPane = (JPanel) mainFrame.getContentPane();
contentPane.add(this);
}
public void run(DisplayMode dm){
setBackground(Color.PINK);
setForeground(Color.WHITE);
setFont(new Font("Arial", Font.PLAIN, 24));
Screen s = new Screen();
s.setFullScreen(dm, this.mainFrame);
try {
Thread.sleep(5000);
} catch (InterruptedException exc) { exc.printStackTrace(); }
s.closeFullScreenWindow();
}
public void paint(Graphics g){
g.drawString("This is some testtext", 200, 200);
}
public static void main(String[] args){
DisplayMode dm = new DisplayMode(800, 600, 32, DisplayMode.REFRESH_RATE_UNKNOWN);
FullscreenTest test = new FullscreenTest();
test.run(dm);
}
}
はScreen.setFullScreen(のDisplayMode dmと、JFrameのウィンドウ)メソッドが何をするかでありますJFrameのコンテンツは全画面でご覧いただけますか?
setFullScreen()を呼び出した直後にthis.mainFrame.repaint()コールをポップすると違いがありますか?全画面表示に変更するとビットがダンプされるのだろうと思っていますが、再描画する必要はありません。 – JTeagle
残念ながらそれは何も変わりません。画面がフルスクリーンモードになっている間に、画面が黒くなる前にキャンバスのピンクの背景が表示されます(repaint()もしなくても)。 – 1Q91
実際には、私は問題は現在のスレッドがスリープ状態になっていると思います。現在のスレッドはUIスレッドなので、効果的にUIスレッドを一時停止し、動作させないようにしています。 run()を呼び出した後で、このクラスからThread.sleep()を取り出し、main()に入れてから、別のメソッドを追加してウィンドウを再び元に戻してください。そうすれば、私のスレッド理論が正しいとすれば、スリープはアプリケーションスレッドであり、UIスレッドではありません。 – JTeagle