【问题标题】:Java - need help for java.lang.ArrayIndexOutOfBoundsExceptionJava - java.lang.ArrayIndexOutOfBoundsException 需要帮助
【发布时间】:2015-10-01 13:10:46
【问题描述】:

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

【问题讨论】:

  • 问题一定出在这里 - device = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[1];。你不能假设数组至少有两个元素。
  • Java 数组从零开始。尝试将 1 更改为 0。
  • 很明显,java中的数组从0开始,编译器清楚地说明了哪一行存在问题。我认为这是微不足道的。
  • @c4k3bomb,请您将解决您问题的答案标记为已接受的答案。

标签: java arrays swing


【解决方案1】:

错误在第 12 行:

GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[1]

数组索引从 0 开始。所以如果你想要第一个屏幕将 1 替换为 0。

【讨论】:

    【解决方案2】:

    这里getScreenDevices()[0] 的索引应该是0 而不是1。由于您的数组大小为 1,并且索引以 0 开头。

    【讨论】:

      【解决方案3】:

      问题出在这一行:

      GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[1];
      

      如果只有一个屏幕设备,您应该使用[0] 而不是[1],因为数组索引是从零开始的。

      【讨论】:

        【解决方案4】:

        Java 数组是零索引的,因此当您访问由getScreenDevices() 返回的数组的索引 1 时,您实际上是在访问数组的第二个元素,在这种情况下该元素不存在。如果您只打算使用一个显示器,那么使用GraphicsEnvironmentgetDefaultScreenDevice() 方法要比将所有屏幕设备作为一个数组来更安全:

        GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
        

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

        【讨论】:

          猜你喜欢
          • 2014-07-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-14
          相关资源
          最近更新 更多