Я не могу на всю жизнь понять Exlusive Fullscreen. Он продолжает выдавать «Недопустимый режим отображения», независимо от того, какой из моих режимов отображения я пробую.
Я пытался сделать это, как показывают официальные учебные пособия по Java, а также учебные пособия других людей. Я продолжаю получать одну и ту же ошибку. Try-finally, как предлагается в официальных руководствах по Java, дает мне те же проблемы. Я уже убедился, что использую свои поддерживаемые режимы.
Может ли это быть как-то связано с разгоном дисплея моего ноутбука от 75 Гц до 100 Гц? Я, конечно, попытался предоставить свой собственный DisplayMode с DisplayMode.REFRESH_RATE_UNKNOWN.
import java.awt.DisplayMode;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
public class Main {
private static GraphicsEnvironment gfxEnv;
private static GraphicsDevice gfxDevice;
private static DisplayMode defaultDisplayMode;
public static void main(String[] args) {
init();
}
private static void init() {
gfxEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
gfxDevice = gfxEnv.getDefaultScreenDevice();
defaultDisplayMode = gfxDevice.getDisplayMode();
DisplayMode[] displayModes = gfxDevice.getDisplayModes();
DisplayMode dm1920x1080x75 = displayModes[displayModes.length - 1];
System.out.println(dm1920x1080x75);
JFrame window = new JFrame();
window.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
aMethodIWantToCallElseWhere();
}
});
window.setUndecorated(true);
window.setResizable(false);
if (gfxDevice.isFullScreenSupported()) {
gfxDevice.setFullScreenWindow(window);
if (gfxDevice.isDisplayChangeSupported())
gfxDevice.setDisplayMode(dm1920x1080x75);
}
}
public static void aMethodIWantToCallElseWhere() {
if (gfxDevice.isDisplayChangeSupported())
gfxDevice.setDisplayMode(defaultDisplayMode);
gfxDevice.setFullScreenWindow(null);
}
}
Вывод на консоль:
1920x1080x32bpp@75Hz
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Invalid display mode
at java.desktop/sun.awt.Win32GraphicsDevice.setDisplayMode(Win32GraphicsDevice.java:452)
at Main.aMethodIWantToCallElseWhere(Main.java:48)
at Main$1.keyTyped(Main.java:33)
at...
Это действительно выводит на полный экран без каких-либо проблем. Но выход из него - вот где возникает проблема. Я попытался сделать это предложенным способом try-finally, который выдает ту же самую ошибку - «Недопустимый режим отображения».
Я поиграл с кучей разных идей, но сейчас у меня нетиз них. Я что-то упустил?
Я бы хотел избежать попытки-наконец, просто чтобы я мог менять режимы по запросу пользователя. Я надеюсь, что это возможно.
РЕДАКТИРОВАТЬ Итак, я попытался установить обратно дисплей с 100 Гц до 75 Гц. Это решило это. Как мне запустить его с разогнанным дисплеем, который даже не отображается в getDisplayModes?