Java - 需要java.lang.ArrayIndexOutOfBoundsException的帮助

时间:2015-10-01 13:10:47

标签: java arrays swing

我正在编写一些基本的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)

4 个答案:

答案 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

如果您计划实施多监视器视图,则需要执行检查以查看是否实际存在多个显示器。