2013-05-25 69 views
0

我尝试捕获ArrayIndexOutOfBoundsException,但它不起作用,我不明白为什么?你能给我一些想法或暗示,为什么会发生这种情况?捕获异常失败

public void actionPerformed(ActionEvent arg0) { 
       System.out.println(getSelectedUser()); 
       try{ 
        System.out.println("deleting id:" +Integer.parseInt((String)table.getModel().getValueAt(table.getSelectedRow(), 0))); 
        table.getModel().getValueAt(table.getSelectedRow(), 0))); 
       } catch (ArrayIndexOutOfBoundsException e){ 
        JOptionPane.showMessageDialog(frmBugSurveilance, "Please select an user!"); 
       } 
        catch (Exception e){ 
       JOptionPane.showMessageDialog(frmBugSurveilance, "Please select an user!"); 
      } 

       getUsers(); 
      } 
     }); 

我需要处理,其中用户不点击从JTable中某一行的情况下...

怎样的程序崩溃:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1 
    at java.util.Vector.elementData(Unknown Source) 
    at java.util.Vector.elementAt(Unknown Source) 
    at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source) 
    at view.AdminGui.getSelectedUser(AdminGui.java:237) 
    at view.AdminGui$3.actionPerformed(AdminGui.java:149) 
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$000(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
+0

地球上为什么你想要捕捉那个异常吗?为什么不直接处理呢?只需修复任何方法将其抛出只接受有效的输入。 – ddmps

回答

4

这是因为你的try块是错误的地方。看看堆栈跟踪这里:

at view.AdminGui.getSelectedUser(AdminGui.java:237) 

,并注意你正在调用该方法之前你try块:

System.out.println(getSelectedUser()); 

改写为这样的:

try{ 
    System.out.println(getSelectedUser()); 
    System.out.println("deleting id:" +Integer.parseInt((String)table.getModel().getValueAt(table.getSelectedRow(), 0))); 
    // ... 
+0

如果您使用像Eclipse或其他IDE这样的符号调试器,那么这个诊断特别容易,因为它们会将您带到发现错误的代码行。 –