如何阻止这个java.lang.ArrayIndexOutOfBoundsException?

时间:2015-02-09 11:18:35

标签: java event-handling jtextfield

我尝试验证我的jtextfeild只输入货币值。其中仅包括数字和全站。前17652.50
所以我尝试了这种方法。但是在执行时我得到了这个 java.lang.ArrayIndexOutOfBoundsException:1

这是方法。

    private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {                                     
    try {
        char c = evt.getKeyChar();
        String mny[] = jTextField1.getText().split("\\.");
        if (!((c >= '0') && (c <= '9') || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE) || (c == KeyEvent.VK_ENTER) || (c == KeyEvent.VK_TAB) || (c == KeyEvent.VK_NUM_LOCK) || (c == '.'))) {
            getToolkit().beep();
            evt.consume();
        }
        if (mny[1].length() == 2) {
            getToolkit().beep();
            evt.consume();
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
} 

在textfeild中键入第一个数字后,我得到了数组索引超出界限异常。据我所知,这是因为mny [o]应该在我进入fullstop之后发生。但我无法找到解决方案。请帮我。 谢谢。

2 个答案:

答案 0 :(得分:2)

您可以将条件更改为:

    if (mny.length > 1 && mny[1].length() == 2) {
        getToolkit().beep();
        evt.consume();
    }

(或类似的东西,取决于所需的逻辑)

答案 1 :(得分:2)

我输入String mny[] = jTextField1.getText().split("\\.");中没有点会返回只有一个项目的数组。 java中的数组是基于零的。因此mny[1].length()会抛出ArrayIndexOutOfBoundsException

如果你的数组大小为2

,你应该在这里查看
if (mny.length > 1 && mny[1].length() == 2) {