JAVA:I';我正在尝试用swing制作基于2D阵列和图形的Connect4游戏

JAVA:I';我正在尝试用swing制作基于2D阵列和图形的Connect4游戏,java,swing,multidimensional-array,graphics,indexoutofboundsexception,Java,Swing,Multidimensional Array,Graphics,Indexoutofboundsexception,后端程序与扫描仪输入一起工作,只是打印出矩阵,但我在图形方面有这个问题。当我只制作带有椭圆的矩形时效果很好,但是当我在故事中引入2D数组,以便在我放置的地方填充其他颜色时,会抛出“线程中的异常”AWT-EventQueue-0“java.lang.ArrayIndexOutOfBoundsException:6”。我试着把它放在不同的地方,并在其他序列中调用它,但它总是抛出这个异常 编辑:这只是一个原型代码,需要做更多的工作,但我需要继续处理这个错误 完整堆栈跟踪: Exception in t

后端程序与扫描仪输入一起工作,只是打印出矩阵,但我在图形方面有这个问题。当我只制作带有椭圆的矩形时效果很好,但是当我在故事中引入2D数组,以便在我放置的地方填充其他颜色时,会抛出“线程中的异常”AWT-EventQueue-0“java.lang.ArrayIndexOutOfBoundsException:6”。我试着把它放在不同的地方,并在其他序列中调用它,但它总是抛出这个异常

编辑:这只是一个原型代码,需要做更多的工作,但我需要继续处理这个错误

完整堆栈跟踪:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 6
    at GameLoop$DrawBoard.paintComponent(GameLoop.java:69)
    at javax.swing.JComponent.paint(JComponent.java:1056)
    at javax.swing.JComponent.paintChildren(JComponent.java:889)
    at javax.swing.JComponent.paint(JComponent.java:1065)
    at javax.swing.JComponent.paintChildren(JComponent.java:889)
    at javax.swing.JComponent.paint(JComponent.java:1065)
    at javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
    at javax.swing.JComponent.paintChildren(JComponent.java:889)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5217)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
    at javax.swing.JComponent.paint(JComponent.java:1042)
    at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
    at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:79)
    at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:116)
    at java.awt.Container.paint(Container.java:1975)
    at java.awt.Window.paint(Window.java:3904)
    at javax.swing.RepaintManager$4.run(RepaintManager.java:842)
    at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
    at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

/**
 * Author : Matija & Zvonimir 
 * Version : 1.0
 * Purpose : Connect 4 game work. Creating working game with arrays
 *           
 *
*/
import java.util.Arrays;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.JComponent;
import java.awt.Graphics2D;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;

public class GameLoop extends JFrame{
   // attributes
   private int [][] matrix;
   int col;
   int row;
   private boolean gameOver = false;
   private int playerTurn = 0;

   Scanner scan = new Scanner(System.in);

   //constants
   private static final int COL = 7;
   private static final int ROWS = 6;

   public static final int SQUARE_SIZE = 100;
   public static final int WIDTH = COL * SQUARE_SIZE;
   public static final int HEIGHT = (ROWS+1) * SQUARE_SIZE;
   public static final int CIRCLE_WIDTH_HEIGHT = (SQUARE_SIZE) - 15;

   //MAIN METHOD
   public static void main(String []args){      

      GameLoop gl = new GameLoop();
      //gl.gameOver();

   }//main

   /*GRAPHICS*/  
   private class DrawBoard extends JPanel{      

      int[][] board = new int[ROWS][COL];

      public DrawBoard(){

         for(int i = 0; i < ROWS; i++){
            for(int j = 0; j < COL; j++){
               board[i][j] = 0;
            }         
         }//set to 0;
      }      


      public void paintComponent(Graphics g){

         super.paintComponents(g); //override  

         for(int i = 0; i < COL; i++){
            for(int j = 0; j < ROWS; j++){

               g.setColor(Color.BLUE);
               g.fillRect( (i*SQUARE_SIZE),(j * SQUARE_SIZE+SQUARE_SIZE),SQUARE_SIZE,SQUARE_SIZE);     

               if(board[i][j] == 0){
                  g.setColor(Color.BLACK);
                  g.fillOval( (i*SQUARE_SIZE),(j*SQUARE_SIZE +SQUARE_SIZE),CIRCLE_WIDTH_HEIGHT,CIRCLE_WIDTH_HEIGHT);                  

               }else if(board[i][j] == 1){

                  g.setColor(Color.RED);
                  g.fillRect( (i*SQUARE_SIZE),(j * SQUARE_SIZE+SQUARE_SIZE),SQUARE_SIZE,SQUARE_SIZE);                     

               }else if(board[i][j] == 2){ 

                  g.setColor(Color.YELLOW);
                  g.fillOval( (i*SQUARE_SIZE),(j*SQUARE_SIZE +SQUARE_SIZE),CIRCLE_WIDTH_HEIGHT,CIRCLE_WIDTH_HEIGHT);

               }
            }
         }     

         for(int i = 0; i < COL; i++){
            for(int j = 0; j < ROWS; j++){


            }//for J
         } //for I

      }//paint component method  

   }//CLASS


   public GameLoop(){            

      DrawBoard board = new DrawBoard();      

      add(board);
      setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
      setPreferredSize( new Dimension(701,732));
      //setResizable(false);
      setLocation( 400,200 );
      setVisible ( true );
      pack();    

   }

   /*
    * Method that creates a 2d array (matrix) filled with 0s
    * @param matrix 2d array
    */ 
   public int[][] createBoard(){
      matrix = new int[ROWS][COL];

      for(int i = 0; i < ROWS; i++){
         for(int j = 0; j < COL; j++){
            matrix[i][j] = 0;
         }         
      }//set to 0

      return matrix;

   }//create board       


}//class game loop
线程“AWT-EventQueue-0”java.lang.ArrayIndexOutofBounds异常:6 位于GameLoop$DrawBoard.paintComponent(GameLoop.java:69) 位于javax.swing.JComponent.paint(JComponent.java:1056) 位于javax.swing.JComponent.paintChildren(JComponent.java:889) 位于javax.swing.JComponent.paint(JComponent.java:1065) 位于javax.swing.JComponent.paintChildren(JComponent.java:889) 位于javax.swing.JComponent.paint(JComponent.java:1065) 位于javax.swing.JLayeredPane.paint(JLayeredPane.java:586) 位于javax.swing.JComponent.paintChildren(JComponent.java:889) 位于javax.swing.JComponent.paintooffscreen(JComponent.java:5217) 在javax.swing.repaitmanager$PaintManager.paintDoubleBuffered处(repaitmanager.java:1579) 在javax.swing.repaitmanager$PaintManager.paint(repaitmanager.java:1502) 在javax.swing.repaitmanager.paint(repaitmanager.java:1272) 位于javax.swing.JComponent.paint(JComponent.java:1042) 位于java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39) 位于sun.awt.sungraphicscalback.runOneComponent(sungraphicscalback.java:79) 位于sun.awt.sungraphicscalback.runComponents(sungraphicscalback.java:116) 位于java.awt.Container.paint(Container.java:1975) 位于java.awt.Window.paint(Window.java:3904) 在javax.swing.repaitmanager$4.run(repaitmanager.java:842) 在javax.swing.repaitmanager$4.run(repaitmanager.java:814) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:814) 位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:789) 位于javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) 在javax.swing.repaitmanager.access$1200(repaitmanager.java:64) 在javax.swing.repaitmanager$ProcessingRunnable.run(repaitmanager.java:1732) 在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)中 位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 在java.awt.EventQueue.access$500(EventQueue.java:97) 在java.awt.EventQueue$3.run(EventQueue.java:709) 在java.awt.EventQueue$3.run(EventQueue.java:703) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 位于java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)中 位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:105) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 在java.awt.EventDispatchThread.run(EventDispatchThread.java:82) /** *作者:Matija&Zvonimir *版本:1.0 *目的:连接4个游戏工作。使用数组创建工作游戏 * * */ 导入java.util.array; 导入java.util.*; 导入java.awt.*; 导入javax.swing.*; 导入javax.swing.JComponent; 导入java.awt.Graphics2D; 导入java.awt.event.MouseListener; 导入java.awt.event.MouseEvent; 公共类GameLoop扩展了JFrame{ //属性 私有int[][]矩阵; int col; int行; 私有布尔gameOver=false; 私有int playerTurn=0; 扫描仪扫描=新扫描仪(System.in); //常数 专用静态最终整数列=7; 私有静态最终整数行=6; 公共静态最终整数平方_尺寸=100; 公共静态最终整数宽度=列*正方形大小; 公共静态最终整数高度=(行数+1)*正方形大小; 公共静态最终整数圆\宽度\高度=(正方形\大小)-15; //主要方法 公共静态void main(字符串[]args){ GameLoop gl=新GameLoop(); //gl.gameOver(); }//主要 /*图形*/ 私有类绘图板扩展JPanel{ int[][]板=新的int[行][COL]; 公共绞车(){ 对于(int i=0;i for(int i = 0; i < COL; i++){ for(int j = 0; j < ROWS; j++){ g.setColor(Color.BLUE); g.fillRect( (i*SQUARE_SIZE),(j * SQUARE_SIZE+SQUARE_SIZE),SQUARE_SIZE,SQUARE_SIZE); if(board[i][j] == 0){ g.setColor(Color.BLACK); g.fillOval( (i*SQUARE_SIZE),(j*SQUARE_SIZE +SQUARE_SIZE),CIRCLE_WIDTH_HEIGHT,CIRCLE_WIDTH_HEIGHT); }else if(board[i][j] == 1){ g.setColor(Color.RED); g.fillRect( (i*SQUARE_SIZE),(j * SQUARE_SIZE+SQUARE_SIZE),SQUARE_SIZE,SQUARE_SIZE); }else if(board[i][j] == 2){ g.setColor(Color.YELLOW); g.fillOval( (i*SQUARE_SIZE),(j*SQUARE_SIZE +SQUARE_SIZE),CIRCLE_WIDTH_HEIGHT,CIRCLE_WIDTH_HEIGHT); } } }