遇到奇怪的问题了,java web的问题

我项目部署在服务器上后,一开始运行没有问题,过一两天后,有小概率会抛出空指针异常,指在this.list.size()这一行,大部分情况没有问题。
重新部署后问题没了,再过一天又是这个问题,我一开始以为是jvm的问题,今天观察了一次fullGC,没有问题。
sql语句查出来数据是对的,DAO方法里面返回list,但这里返回赋值的list有时候变成null了
有没有大牛说一下问题可能出在哪里,谢谢指点!下面是相关代码。
public class ArticlesAction extends SuperAction {

/**
 * 
 */
private int title;
private int pageNow = 0;
private final int pageSize = 2;
private static final long serialVersionUID = 1L;
private ArticlesDAO adao = new ArticlesDAOImpl();
private UsersDAO udao = new UsersDAOImpl();
private ArrayList<Articles> list = new ArrayList<Articles>(2);
ArrayList<Reply> replyList = new ArrayList<Reply>();

public String queryFirstPage(){
    session.setAttribute("currentPage", 1);
    try{
        this.list = (ArrayList<Articles>) adao.queryArticlesByPage(2, 1);
    }catch(NullPointerException npe){
        this.list = (ArrayList<Articles>) adao.queryArticlesByPage(2, 1);
    }
    if(this.list == null){//这里小概率抛出空指针异常,list不应该是null
        return "null_error";
    }
    if(this.list.size()==0){
        return "error";
    }
    request.setAttribute("blognumber", this.list.size());
    request.setAttribute("bloglist", this.list);
    return "join_success";
}

null == this,list

null==this.list

建议你在这个类中写出那些private变量的get和set方法,判断的list为空的判断顺序是,list==null,list.isEmpty(),list.size()<=0
抛出空指针异常不会发生在你注释的地方,只能是在你的try-catch中,一般的赋值语句,右边值为空指针时会抛出异常,而对于你定义的list == null两个对象用==是不会抛出nullpointException的,希望对你有帮助

为什么要强转啊,不强转会报错?我感觉是不是你那个强转那里有时候强转成功,有时候强转失败,因为空指针异常的话,就说明你的集合是空的,你别强转了,你把那个方法的返回值改为List,这样就不用强转了.

如果是这样的话,项目刚部署就不会出现问题这种情况怎么解释呢,我这个项目部署当天不会有这个问题,问题第二题要么第三天会出现

你这种写法我感觉有点怪怪的,我就随便说一下,也不一定对
private ArrayList list = new ArrayList(2); -->private List list = new ArrayList(2)
this.list = (ArrayList) adao.queryArticlesByPage(2, 1);-->this.list = adao.queryArticlesByPage(2, 1);
你在adao中应该已经限定泛型了 List

至于你出问题的原因具体我也不知道,这样修改还会出的话就当我这是废话

上面写的泛型没出来,被格式掉了,就是在private List< Articles > list = new ArrayList(2)