“AWT-EventQueue-0”java.lang.ArrayIndexOutOfBoundsException:2
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19936416/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
"AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2
提问by user2984357
I am trying to create a Tic-Tac-Toe game in Java for one of my classes. The program takes an int from the command line and creates a JButton 2D array of that size. It also has an undo and a new game button. The program compiles and runs and when I click the new game button no exception occurs, but when I click on one of the game spaces, it throws this exception.
我正在尝试为我的一个课程用 Java 创建一个井字游戏。该程序从命令行获取一个 int 并创建一个该大小的 JButton 2D 数组。它还具有撤消和新游戏按钮。程序编译并运行,当我点击新游戏按钮时没有异常发生,但是当我点击其中一个游戏空间时,它会抛出这个异常。
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2
at GameTester.newMove(GameTester.java:28)
at TicTacToe$GameListener.actionPerformed(TicTacToe.java:145)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
at java.awt.EventQueue.access0(EventQueue.java:103)
at java.awt.EventQueue.run(EventQueue.java:682)
at java.awt.EventQueue.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue.run(EventQueue.java:696)
at java.awt.EventQueue.run(EventQueue.java:694)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
My newMove method simply takes the x and y locations of the button and the turn (1 or 2), and adds it to the 2D int array associated with the GameTester class.
我的 newMove 方法只是获取按钮和转弯(1 或 2)的 x 和 y 位置,并将其添加到与 GameTester 类关联的 2D int 数组中。
public void newMove(int x, int y, int turn)
{
board[x][y] = turn;
}
This is part of the loop within my ActionListener that includes where the newMove method is called.
这是我的 ActionListener 中循环的一部分,其中包括调用 newMove 方法的位置。
if (event == buttons[x][y])
{
theBoard.moveLog(x,y);
theBoard.newMove(x,y,toggle);
if (toggle == 1)
{
buttons[x][y].setText("X");
toggle = 2;
}
else
{
buttons[x][y].setText("O");
toggle = 1;
}
.....
}
Any help is greatly appreciated! :)
任何帮助是极大的赞赏!:)
采纳答案by crownjewel82
From what you have provided the problem is likely that buttons
and board
are not arrays of the same dimensions. Try using variables to set both sizes or use one to set the other to be sure they are the same size.
从您提供什么问题可能是buttons
和board
不是同一尺寸的阵列。尝试使用变量来设置两个大小或使用一个来设置另一个以确保它们的大小相同。
Option 1
选项1
int X = 3, Y = 3;
JButton[][] buttons = new JButton[X][Y];
char[][] board = new char[X][Y];
Option 2
选项 2
int X = 3, Y = 3;
JButton[][] buttons = new JButton[X][Y];
char[][] board = new char[buttons.length][buttons[0].length];
If this isn't the case then you'll need to provide a short, self-contained, compilable exampleof your problem so we can see what's going on.
如果不是这种情况,那么您需要提供一个简短的、独立的、可编译的问题示例,以便我们了解发生了什么。