Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JAVA语言中,用setDisplayMode更改全屏应用程序的分辨率_Java_Jframe_Fullscreen_Resolution - Fatal编程技术网

在JAVA语言中,用setDisplayMode更改全屏应用程序的分辨率

在JAVA语言中,用setDisplayMode更改全屏应用程序的分辨率,java,jframe,fullscreen,resolution,Java,Jframe,Fullscreen,Resolution,我是JAVA语言的初学者,正在尝试学习如何创建全屏应用程序 我正在尝试创建一个简单的应用程序,在运行时,它会显示一个带有蓝色背景的全屏,并且在屏幕中央显示一行简单的文本(从400x300位置开始)。应用程序的分辨率设置为800x600 我正在MacbookAir上运行代码,运行OSX Lion,屏幕分辨率为1440x900。问题是,尽管如我所料得到了蓝色背景,但文本只出现在屏幕的左上角。当我增加文本的位置时,文本的位置将继续向下和向右移动,直到它消失时超过1440x900。我猜屏幕分辨率仍然设置

我是JAVA语言的初学者,正在尝试学习如何创建全屏应用程序

我正在尝试创建一个简单的应用程序,在运行时,它会显示一个带有蓝色背景的全屏,并且在屏幕中央显示一行简单的文本(从400x300位置开始)。应用程序的分辨率设置为800x600

我正在MacbookAir上运行代码,运行OSX Lion,屏幕分辨率为1440x900。问题是,尽管如我所料得到了蓝色背景,但文本只出现在屏幕的左上角。当我增加文本的位置时,文本的位置将继续向下和向右移动,直到它消失时超过1440x900。我猜屏幕分辨率仍然设置为1440x900,而不是800x600

以下是我的主要课程:

import java.awt.*;
import javax.swing.JFrame;

public class bucky extends JFrame {
    public static void main(String[] args){

        DisplayMode dm = new DisplayMode(800, 600, 16, DisplayMode.REFRESH_RATE_UNKNOWN);
        bucky b = new bucky();
        b.run(dm);
    }

    public void run(DisplayMode dm){
        setBackground(Color.BLUE); // Setting background color
        setForeground(Color.WHITE);
        setFont(new Font("Arial", Font.PLAIN, 24));

        //The Screen variable is going to be a screen object
        Screen s = new Screen();
        try{
            s.setFullScreen(dm, this); //this refers to whatever object we are working on, ie 's'
            try{
                //Once it is set to full screen, and wait for 5 second
                Thread.sleep(5000);
            }catch(Exception ex){};
        }
        finally{
            s.restoreScreen();
        }
    }

    public void paint(Graphics g){
        g.drawString("Test", 400, 300);
    }

}
这里是Screen类的构造函数和Screen类的方法,它将应用程序设置为全屏

private GraphicsDevice vc; // Gives an interface to graphics card/video card.

public Screen(){
    //env is environment variable, containing all graphics manipulation objects
    GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();

    //When we get environment and getDegaultScreen Device, we get access to the entire monitor, not just a window
    vc = env.getDefaultScreenDevice();

}

public void setFullScreen(DisplayMode dm, JFrame window){ 

        window.setUndecorated(true); 
        window.setResizable(false); 
        vc.setFullScreenWindow(window); 


        if(dm != null && vc.isDisplayChangeSupported()) {
            try{
                vc.setDisplayMode(dm); 
            }catch(Exception ex){}
        }

    }
如果有人能告诉我为什么没有正确设置解决方案,我将不胜感激。

来自

显示模式必须是由返回的显示模式之一 getDisplayModes(),但有一个例外:将显示模式传递给 DisplayMode.REFRESH\u RATE\u未知的刷新率将导致选择 从可用显示模式列表中选择显示模式,并进行匹配 宽度、高度和钻头深度


因此,您需要确保将显示模式设置为这些模式之一。

我认为答案是javadoc of。
您应该首先检查
if(gd.isFullScreenSupported())
,然后调用
setFullScreenWindow(frame)
,或者使用
frame.setSize(…)
方法模拟全屏模式。

如果停止接受异常,您可能会得到一些有用的信息。添加例如printStackTrace();至少对你的捕获块是这样的。@RickyClarkson谢谢你的想法,正如你所猜测的,我确实在我的Screen类中,在vc.setDisplayMode(dm)的setFullScreen方法中遇到了一个错误。错误为“显示模式无效”。你能告诉我这是什么意思吗?正如你在我的代码中看到的,我使用的是DisplayMode.REFRESH\u RATE\u UNKNOWN。我试图将其设置为的显示模式是:
DisplayMode dm=newdisplaymode(800、600、16,DisplayMode.REFRESH\u RATE\u UNKNOWN)您是否发现getDisplayModes()提供了任何800x600的16位颜色的显示模式?REFRESH_RATE_UNKNOWN参数似乎只允许您不指定刷新率,而不是让方法自动选择最接近的匹配分辨率等。谢谢,我知道我现在把事情搞砸了。虽然我仔细检查了分辨率,但我没有真正注意颜色深度,结果机器只支持32位及以上的颜色。谢谢你的帮助。我遇到的唯一问题是实际更改显示模式,我通过同时使用
DisplayMode.BIT\u DEPTH\u MULTI
DisplayMode.REFRESH\u RATE\u UNKNOWN
解决了这个问题。在Java8中使用Kubuntu15.10。