我正在编写一些基本的Java游戏代码,但我无法找到解决问题的方法。 这是代码:
[GameWindow.java]
package my.project.gop.main;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import javax.swing.JFrame;
public class GameWindow extends JFrame{
boolean fse = false;
int fsm = 0;
GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[1];
public GameWindow(String title, int width, int height) {
setSize(width, height);
setLocationRelativeTo(null);
setTitle(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
}
private void setfullscreen()
{
switch(fsm)
{
case 0:
System.out.println("No fullscreen");
setUndecorated(false);
break;
case 1:
setExtendedState(JFrame.MAXIMIZED_BOTH);
setUndecorated(true);
break;
case 2:
device.setFullScreenWindow(this);
setUndecorated(true);
break;
}
}
public void setFullscreen(int fsnm)
{
fse = true;
if(fsm <= 2)
{
this.fsm = fsnm;
setfullscreen();
}else{
System.err.println("Error: " +fsnm + " is not supported");
}
}
}
[Main.java]
package my.tdl.main;
import my.project.gop.main.GameWindow;
public class Main {
public static void main(String[] args) {
GameWindow frame = new GameWindow("TheDLooter", 1280, 720);
frame.setFullscreen(1);
frame.setVisible(true);
}
}
我收到此错误消息:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at my.project.gop.main.GameWindow.<init>(GameWindow.java:12)
at my.tdl.main.Main.main(Main.java:8)
答案 0 :(得分:2)
错误在第12行:
GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[1]
数组索引从0开始。因此,如果您希望第一个屏幕将1替换为0。
答案 1 :(得分:0)
此处getScreenDevices()[0]
索引应为0
而不是1
。由于数组大小为1,索引以0
开头。
答案 2 :(得分:0)
问题在于这一行:
GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[1];
如果只有一个屏幕设备,则应该[0]
而不是[1]
,因为数组索引是基于零的。
答案 3 :(得分:0)
Java数组是零索引的,因此当您访问getScreenDevices()
返回的数组的索引1时,您实际上正在访问数组的第二个元素,在这种情况下不会存在。如果您只是计划使用一个显示器,那么使用getDefaultScreenDevice()
的{{1}}方法更安全,而不是将所有屏幕设备都设为数组:
GraphicsEnvironment
如果您计划实施多监视器视图,则需要执行检查以查看是否实际存在多个显示器。