2015-10-01 127 views
-2

我正在寫一些基本的Java遊戲代碼,我找不到解決我的問題。 下面是代碼:Java - 需要幫助java.lang.ArrayIndexOutOfBoundsException

[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) 
+3

問題一定在這裏 - 'device = GraphicsEnvironment.getLocalGraphicsEnvironment()。getScreenDevices()[1];'。你不能假設該數組至少有兩個元素。 – Eran

+0

Java數組從零開始。嘗試將其更改爲零。 – duffymo

+0

這很明顯,因爲java中的數組從0開始,編譯器明確指出哪一行存在問題。我認爲這是微不足道的。 –

回答

2

錯誤在線12:

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

數組索引從0開始,所以如果你想第一個屏幕由0.1

0

這裏getScreenDevices()[0]指數更換1次應01。由於您的數組大小爲1,索引從0開始。

0

問題是這一行:

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

如果只有一個屏幕設備,你應該有[0]而不是[1]因爲數組索引是從零開始的。

0

Java數組是零索引的,所以當您訪問由getScreenDevices()返回的數組的索引1時,實際上是訪問數組的第二個元素,在這種情況下該元素不存在。您正在使用的GraphicsEnvironmentgetDefaultScreenDevice()方法,而不是讓所有的屏幕設備作爲一個數組更安全,如果你只使用一個顯示器策劃:

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

如果您正在計劃執行多顯示器的看法,那麼你需要執行檢查以查看是否存在多個顯示器。