Java屏幕分辨率更改

6

我正在Youtube上跟随thenewboston的Java游戏开发教程系列。我已经成功创建了全屏窗口,但分辨率无法调整为800x600。我已经测试了vc、GraphicsEnvironment.getDefaultScreenDevice对象和dm、DisplayMode,它们似乎不是问题所在。我使用的操作系统是Snow Leopard。有什么想法吗?

if(dm != null && vc.isDisplayChangeSupported()){
        try{
            vc.setDisplayMode(dm);
            System.out.println("Display mode set");
        }catch(Exception ex){System.out.println("Despite the vc saying it is display change supported and the DM is not null, something went wrong");}

    }
}

1
当这段代码执行时,您是否会收到异常?如果是,请尝试使用ex.getMessage()ex.printStackTrace()打印出错误消息。 - Hunter McMillen
类似的代码在Leopard上可以工作。编辑您的问题以包括一个sscce,展示您所描述的问题可能会有所帮助。 - trashgod
1
检查一下,已经修复了。不得不将位深度改为32。很抱歉浪费了您的时间。 - Walter Coggeshall
3
没问题,确保在catch块中始终获取异常消息,空的catch块会导致数小时的调试。 - Hunter McMillen
1
@WalterCoggeshall,您能回答自己的问题并将其标记为已解决吗? - parasietje
显示剩余3条评论
1个回答

1
将以下代码添加到您的Core.java(或GameClient.java)类中。问题可能是您没有将所需的DM []参数传递给ScreenManager.java类。
private static final DisplayMode modes[] = { //common monitor DMs 
    new DisplayMode(1366,768,32, DisplayMode.REFRESH_RATE_UNKNOWN), //1366x768px w/32-bit depth
    new DisplayMode(1366,768,24, DisplayMode.REFRESH_RATE_UNKNOWN), //    '      w/24-bit depth
    new DisplayMode(1366,768,16, DisplayMode.REFRESH_RATE_UNKNOWN), //    '      w/16-bit depth     
    new DisplayMode(800,600,32, DisplayMode.REFRESH_RATE_UNKNOWN),  //800x600px  w/32-bit depth
    new DisplayMode(800,600,24, DisplayMode.REFRESH_RATE_UNKNOWN),  //    '      w/24-bit depth
    new DisplayMode(800,600,16, DisplayMode.REFRESH_RATE_UNKNOWN),  //    '      w/16-bit depth 
    new DisplayMode(640,480,32, DisplayMode.REFRESH_RATE_UNKNOWN),  //640x480px  w/32-bit depth
    new DisplayMode(640,480,24, DisplayMode.REFRESH_RATE_UNKNOWN),  //    '      w/24-bit depth
    new DisplayMode(640,480,16, DisplayMode.REFRESH_RATE_UNKNOWN),  //    '      w/16-bit depth
};

我假设错误出在您的public void setFullScreen(DisplayMode dm)方法上。在这种情况下,该方法的完整语法如下:
/*****************************************************************************
 * @description: Creates window for program to run in, using appropriate DM
 * @param DisplayMode dm 
 */
    public void setFullScreen(DisplayMode dm){
        JFrame f = new JFrame();
        f.setUndecorated(true); //no titlebars/scroll bars etc.
        f.setIgnoreRepaint(true);
        f.setResizable(false); //user cannot resize window
        vc.setFullScreenWindow(f);

        if(dm!=null && vc.isDisplayChangeSupported()){ //if DM is changeable
            try {
                vc.setDisplayMode(dm);
            } catch (Exception e){/*Catch 'em all*/}
        }
        f.createBufferStrategy(2); //set # of screen buffers to 2
    }//setFullScreen()

发现这是一个轻微的旧帖子,发完后才注意到。啊啊...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接