我有两个名为 field1 和 field2 的 JTextField,目标是输入名称,当我按回车键时,将这些值存储在 nameArray[] 中的位置 0 和 1 处。
我不确定原因是我的 Action 监听器的逻辑还是我声明数组的方式。如果是其中任何一个......
数组的声明方式如下,就在我的类声明下方:
public class TwoPlayer{
private String[] nameArray = {};
这是我的 Action 监听器和 field1 初始化:
JTextField field1 = new JTextField("Left name");
field1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String lValue = field1.getText();
String leftValue = String.valueOf(lValue);
nameArray[0] = (leftValue);
}
});
字段2:
JTextField field2 = new JTextField("Right name");
field2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String rValue = field2.getText();
String rightValue = String.valueOf(rValue);
nameArray[1] = (rightValue);
}
});
强制堆栈:
线程“AWT-EventQueue-0”中出现异常 java.lang.ArrayIndexOutOfBoundsException: 0 在测试.TwoPlayer$1.actionPerformed(TwoPlayer.java:37) 在 javax.swing.JTextField.fireActionPerformed(JTextField.java:508) 在 javax.swing.JTextField.postActionEvent(JTextField.java:721) 在 javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:836) 在 javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1663) 在javax.swing.JComponent.processKeyBinding(JComponent.java:2882) 在javax.swing.JComponent.processKeyBindings(JComponent.java:2929) 在 javax.swing.JComponent.processKeyEvent(JComponent.java:2845) 在 java.awt.Component.processEvent(Component.java:6312) 在 java.awt.Container.processEvent(Container.java:2236) 在java.awt.Component.dispatchEventImpl(Component.java:4891) 在 java.awt.Container.dispatchEventImpl(Container.java:2294) 在 java.awt.Component.dispatchEvent(Component.java:4713) 在java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954) 在java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806) 在java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074) 在 java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945) 在java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771) 在 java.awt.Component.dispatchEventImpl(Component.java:4762) 在 java.awt.Container.dispatchEventImpl(Container.java:2294) 在 java.awt.Window.dispatchEventImpl(Window.java:2750) 在 java.awt.Component.dispatchEvent(Component.java:4713) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 在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( native 方法) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 在 java.awt.EventQueue$4.run(EventQueue.java:731) 在 java.awt.EventQueue$4.run(EventQueue.java:729) 在 java.security.AccessController.doPrivileged( native 方法) 在 java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 在java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
最佳答案
这是初始化数组的方式。您目前有private String[] nameArray = {};
这会创建一个新的 String[]
长度为 0 并解释 IndexOutOfBoundsException
.
您想要的是 private String[] nameArray = new String[2];
它初始化 String[]
将容纳两个字符串。
关于java - 将文本字段值放入数组中,ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35664740/