今天写项目时,遇到了一个小问题,myeclipse报了以下的错误信息:java.lang.IndexOutOfBoundsException: Index: 0, Size: 0java.util.ArrayList.RangeCheck(ArrayList.java:547)java.util.ArrayList.get(ArrayList.java:322)cn.jbit.action.UserAction.loginUser(UserAction.java:26)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)java.lang.reflect.Method.invoke(Method.java:597)com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)从错误消息的“0java.util.ArrayList.RangeCheck(ArrayList.java:547)java.util.ArrayList.get(ArrayList.java:322)”,可以看出,ArrayList.get(0)这里出现越界,因此,可以从检查代码中哪里使用了list对象.get(0)的方法,再从抛出异常的类的限定名cn.jbit.action.UserAction.loginUser(UserAction.java:26)中找到抛出异常的方法,详见如下:
public String loginUser() {
Users user = (Users) userDao.findByExample(userjsp).get(0);
if (user != null) {
ActionContext.getContext().getSession().put("user", user);
return SUCCESS;
} else {
return INPUT;
}
}
当时,忽略了登录不成功时,也就没有登录成功的那个对象返回,返回的list集合的长度为0,再用listobject.get(0)时,肯定就会抛出异常!改正后的代码如下,并解决了问题:
public String loginUser(){
List<Users> userlist =(List<Users>)userDao.findByExample(userjsp);
if(userlist.size()!=0){
ActionContext.getContext().getSession().put("user", userlist.get(0));
return SUCCESS;
} else{
return INPUT;
}
}
希望,对大家有帮助!