当前位置:编程学习 > JAVA >>

这个空指针问题折磨我一天了

java.lang.NullPointerException
com.oexam.daoimpl.OeUserDAOImpl.findAll(OeUserDAOImpl.java:190)
com.oexam.action.UserAction.login(UserAction.java:31)
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)
OeUserDaoImpl在后台的junit测试中数据是正常的,但是一弄到前台就完蛋了 用的hibernate3.3和struts2.0
怎么回事啊 --------------------编程问答-------------------- 没有代码呀,你不能让我猜啊。 --------------------编程问答-------------------- 把所有的没错的都去掉了 这是action 
public class UserAction extends ActionSupport {

private OeUserDAOImpl oeUserDAOImpl = new OeUserDAOImpl();
private String name;
private String password;


/**
 * 用户登录方法
 * 
 * @return
 */
public String login() {
String path="error";
System.out.println("用户名:" + name);
System.out.println("密码:" + password);
System.out.println("操作对象" + oeUserDAOImpl.findAll());
return path;
}


这是findAll方法
public List findAll() {
log.debug("finding all OeUser instances");

Session session = null;
Transaction transaction = null;

try {
session = this.getSession();
transaction = session.beginTransaction();
String queryString = "from OeUser where state=1";
Query queryObject = getSession().createQuery(queryString);
transaction.commit();
return queryObject.list();
} catch (RuntimeException re) {
log.error("find all failed", re);
transaction.rollback();
throw re;
}finally {
session.close();
}
}

junit测试方法(数据正常显示出来了)
@Test
public void testFindAll() {
OeUserDAOImpl dao = new OeUserDAOImpl();
List<OeUser> list = dao.findAll();
Iterator<OeUser> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next().getUsername());
}
}

然后前台登录的时候传进用户名密码(system.out.println那个地方打印出来了,参数没问题),然后我执行那个findAll方法想,然后就是这个空指针 --------------------编程问答-------------------- 没有人知道吗 --------------------编程问答-------------------- 把相关的都贴处理,看看。。。
--------------------编程问答-------------------- finally {
   if(null != session){
   session.close();
   }
}
--------------------编程问答-------------------- 大哥,你贴出来的代码和错误信息没关系,你先看清错误信息了把代码贴出来 --------------------编程问答--------------------  Query queryObject = getSession().createQuery(queryString);  你这里还getSession干吗嘛,你原来那个session等于废了,你这里的seesion又没开始事务 --------------------编程问答-------------------- debug --------------------编程问答-------------------- null --------------------编程问答-------------------- 哥们debug一下吧 --------------------编程问答--------------------  debug一下就知道了  --------------------编程问答--------------------
引用 8 楼 wycgzl 的回复:
debug
+1 --------------------编程问答-------------------- 你这样试试:

public class UserAction extends ActionSupport {

    private OeUserDAOImpl oeUserDAOImpl;
    private String name;            
    private String password;


    /**
     * 用户登录方法
     * 
     * @return
     */
    public String login() {
        oeUserDAOImpl = new OeUserDAOImpl();
        String path="error";
        System.out.println("用户名:" + name);
        System.out.println("密码:" + password);
        System.out.println("操作对象" + oeUserDAOImpl.findAll());
        return path;
    }



--------------------编程问答--------------------
引用 7 楼 geool 的回复:
Query queryObject = getSession().createQuery(queryString); 你这里还getSession干吗嘛,你原来那个session等于废了,你这里的seesion又没开始事务

+2 --------------------编程问答-------------------- 这种情况只猜了。DEBUG一个就OK了啦!如果findall返回的是空呢。 --------------------编程问答-------------------- 哥们,不会debug就打印吧! --------------------编程问答-------------------- 你压根就没有用传进来的用户名和密码查数据库,你这不能叫登录啊
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,