尝试使用jTextField进行过滤的java.lang.StringIndexOutOfBoundsException

时间:2014-06-05 05:26:31

标签: java swing

我做了一个方法,帮助我用jTable中写的内容来过滤jTextField的行,问题是当我尝试在jTextField中写入超过8时它会引发一个名为...的错误

Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 9
at java.lang.String.substring(String.java:1907) at java.lang.String.substring(String.java:1907)
at vocaciones.test_consulta.filtrar(test_consulta.java:338)
at vocaciones.test_consulta.jTextField1KeyTyped(test_consulta.java:350)
at vocaciones.test_consulta.access$000(test_consulta.java:21)
at vocaciones.test_consulta$1.keyTyped(test_consulta.java:79)
at java.awt.Component.processKeyEvent(Component.java:6460)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2828)
at java.awt.Component.processEvent(Component.java:6282)
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.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1895)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:762)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1027)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:899)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:727)
at java.awt.Component.dispatchEventImpl(Component.java:4731)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

这是方法......

private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {                                     
    String text = jTextField1.getText().toUpperCase();
    jTextField1.setText(text);

    String selArt, desBd;
    String desBD = jTextField1.getText();

    int cdes = desBD.length();
    int row = 0;

    for (int i = 0; i < jTable1.getRowCount(); i++) {
        selArt = (String) jTable1.getValueAt(i, 1);
        desBd = selArt.substring(0, cdes);

        if(desBd.equalsIgnoreCase(desBD.toUpperCase())){
            row = i;
            i = jTable1.getRowCount()+1;
        }
    } 

    jTable1.changeSelection(row, 2, false, false );
    jTable1.setSelectionBackground(Color.DARK_GRAY);
}

我希望你能帮助我解决这个问题并提前感谢!

3 个答案:

答案 0 :(得分:0)

你有这个例外,因为cdes > selArt.length()。检查cdes值,然后在substring方法上使用它。

if(cdes <= selArt.length()){
  desBd = selArt.substring(0, cdes);
}

答案 1 :(得分:0)

这是一个简单的问题,只需打印jTable1.getValueAt(i, 1);

,检查i=9 jTable1.getRowCount()是否存在
for (int i = 0; i <= jTable1.getRowCount(); i++) {
i<=jTable1.getRowCount()

答案 2 :(得分:0)

让我们检查一下Exception

Exception in thread "AWT-EventQueue-0" 
java.lang.StringIndexOutOfBoundsException: String index out of range: 9<-----(1)
at java.lang.String.substring(String.java:1907) at  <------(2)
  1. StringIndexOutOfBoundException您要获得的Exception的姓名
  2. java.lang.String.substring(String.java:1907) Exception
  3. 的原因
      

    问题是当我尝试在jTextField中写入超过8个   它会引发一个名为...的错误

    desBd = selArt.substring(0, cdes);的代码中cdec >8 say 9生成异常,因为selArt的长度为8。

    • int cdes = desBD.length();所以cdec来自JTextField的{​​{1}}
    • String和您从selArt = (String) jTable1.getValueAt(i, 1);
    • 获得的艺术品

    所以要使用JTable的{​​{1}}长度cdesString