将文本字段值放入数组,ArrayIndexOutOfBoundsException
Putting Textfield value into array, ArrayIndexOutOfBoundsException
我有两个名为 field1 和 field2 的 JTextField,目标是输入名称,当我点击 return 时,将这些值存储在 nameArray[] 中的位置 0 和 1。
我不确定原因是我的动作侦听器的逻辑还是我声明数组的方式。如果是其中任何一个...
数组声明如下,就在我的 class 声明下方:
public class TwoPlayer{
private String[] nameArray = {};
这是我的动作侦听器和 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
在 tests.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(默认 KeyboardFocusManager.java:806)
在 java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(默认值KeyboardFocusManager.java:1074)
在 java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(默认 KeyboardFocusManager.java:945)
在 java.awt.DefaultKeyboardFocusManager.dispatchEvent(默认 KeyboardFocusManager.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.access500 美元(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: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(本机方法)
在 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 = {};
,它创建了一个长度为 0 的新 String[]
并解释了 IndexOutOfBoundsException
。
您想要的是 private String[] nameArray = new String[2];
,它初始化一个 String[]
,它将包含两个字符串。
我有两个名为 field1 和 field2 的 JTextField,目标是输入名称,当我点击 return 时,将这些值存储在 nameArray[] 中的位置 0 和 1。
我不确定原因是我的动作侦听器的逻辑还是我声明数组的方式。如果是其中任何一个...
数组声明如下,就在我的 class 声明下方:
public class TwoPlayer{
private String[] nameArray = {};
这是我的动作侦听器和 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 在 tests.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(默认 KeyboardFocusManager.java:806) 在 java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(默认值KeyboardFocusManager.java:1074) 在 java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(默认 KeyboardFocusManager.java:945) 在 java.awt.DefaultKeyboardFocusManager.dispatchEvent(默认 KeyboardFocusManager.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.access500 美元(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: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(本机方法) 在 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 = {};
,它创建了一个长度为 0 的新 String[]
并解释了 IndexOutOfBoundsException
。
您想要的是 private String[] nameArray = new String[2];
,它初始化一个 String[]
,它将包含两个字符串。