Service层:package com.shhelian.app.service.customer;import java.text.SimpleDateFormat;
import java.util.List;import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import com.shhelian.app.dao.ContactDao;
import com.shhelian.app.model.Contact;
import com.shhelian.modules.orm.PaginationSupport;
@Component("contactService")
public class ContactService { static Logger logger = Logger
.getLogger(ContactService.class.getName());

@Autowired
private ContactDao entityDao;

// 分页
public PaginationSupport<Contact> findPage(int pageSize,
int startIndex, String contactName,String cId,String creName) {
return entityDao.findPage(pageSize, startIndex, contactName,cId,creName);
}

/**
 * 添加联系人
 * @param contact
 */
public void save(Contact contact) {
logger.debug("==========> save");
try {
if (contact.getContactId() == null) {
java.util.UUID uuid = java.util.UUID.randomUUID();
contact.setContactId(uuid.toString());
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");  
String ly_time = sdf.format(new java.util.Date());
contact.setCreateDate(ly_time);
entityDao.save(contact);
} catch (Exception e) {
e.getStackTrace();
}
}

/**
 * 根据ID查询
 * @param contactId
 * @return
 */
public Contact findById(String contactId) { logger.debug("==========> findById");
return entityDao.findById(contactId);
}

/**
 * 自定义属性
 * @param names 自定义属性名
 */
public void saveField(String names,String values){
logger.debug("===========> saveField");
entityDao.saveField(names, values);
}

/**
 * 保存属性值
 * @param str
 */
public void saveFields(String str,String cId){
entityDao.saveFields(str,cId);
}

/**
 * 修改属性值
 * @param str
 */
public void updateFields(String str,String cId){
try{
System.out.println("**************************************** " + cId);
entityDao.updateFields(str,cId);
}catch (Exception e) {
e.printStackTrace();
}
}

/**
 * 更新
 * @param contact
 */
public void update(Contact contact){
entityDao.update(contact);
}

public void delete(String contactId){
entityDao.delete(contactId);
}

/**
 * 查询所有 特殊提醒为“有”的联系人
 * @return
 */
public List findAll(){
try {
return entityDao.findAll();
} catch (Exception e) {
e.printStackTrace();
return null;
}

}
}测试类:package com.shhelian.modules.util.time;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.scheduling.quartz.CronTriggerBean;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.security.ldap.SpringSecurityContextSource;import com.shhelian.app.dao.ContactDao;
import com.shhelian.app.service.customer.ContactService;
import com.shhelian.modules.util.Email.MyAuthenticator;public class MyJob extends QuartzJobBean { private int timeout;
private String ToAddress;
private String subject;
private String content;
private List list;


@Autowired
private ContactService contactService; 

@Override
protected void executeInternal(JobExecutionContext context)throws JobExecutionException{

System.out.println("现在时间为: " + (new Date()));

//取系统当前的时间 年  月  日 小时:分钟:秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
String ly_time = sdf.format(new java.util.Date()); 
System.out.println("=======" + ly_time);
//判断当前时间是否与数据库中查询到的数据相等,是则发送邮件,否则反之。
if(ly_time.equals("2012-10-15 11:00:00")){
MyAuthenticator mycator = new MyAuthenticator();
mycator.toMail();  //发送邮件
}else{
System.out.println("没有匹配时间...");
this.findContact();
}

}

/**
 * 查询所有 特殊提醒为“有”的 联系人
 * @return
 */
public List findContact(){
try {
list = contactService.findAll();
System.out.println("===----" + list.size());
return list;
} catch (Exception e) {
e.printStackTrace();
System.out.println("出错了 ...");
return null;
}
}

public void setTimeout(int timeout) {
this.timeout = timeout;
}
public List getList() {
return list;
} public void setList(List list) {
this.list = list;
}
}

错误信息:

java.lang.NullPointerException
at com.shhelian.modules.util.time.MyJob.findContact(MyJob.java:70)
at com.shhelian.modules.util.time.MyJob.executeInternal(MyJob.java:51)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:529)
出错了 ...红色字体 军为关键代码 已标识!
空指针错误 ,  查询所有的联系人方法 FindAll()在Action层中测试过了, 可以查询到数据 但是在这个类里就不可以了 。希望帮忙解决下! 

解决方案 »

  1.   

    ContactService  看看这个Service 是不是没有实例, 
      

  2.   


    package com.shhelian.app.service.customer;import java.text.SimpleDateFormat;
    import java.util.List;import org.apache.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;import com.shhelian.app.dao.ContactDao;
    import com.shhelian.app.model.Contact;
    import com.shhelian.modules.orm.PaginationSupport;
    @Component("contactService")
    public class ContactService { static Logger logger = Logger
    .getLogger(ContactService.class.getName());

    @Autowired
    private ContactDao entityDao;

    // 分页
    public PaginationSupport<Contact> findPage(int pageSize,
    int startIndex, String contactName,String cId,String creName) {
    return entityDao.findPage(pageSize, startIndex, contactName,cId,creName);
    }

    /**
     * 添加联系人
     * @param contact
     */
    public void save(Contact contact) {
    logger.debug("==========> save");
    try {
    if (contact.getContactId() == null) {
    java.util.UUID uuid = java.util.UUID.randomUUID();
    contact.setContactId(uuid.toString());
    }
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");  
    String ly_time = sdf.format(new java.util.Date());
    contact.setCreateDate(ly_time);
    entityDao.save(contact);
    } catch (Exception e) {
    e.getStackTrace();
    }
    }

    /**
     * 根据ID查询
     * @param contactId
     * @return
     */
    public Contact findById(String contactId) { logger.debug("==========> findById");
    return entityDao.findById(contactId);
    }

    /**
     * 自定义属性
     * @param names 自定义属性名
     */
    public void saveField(String names,String values){
    logger.debug("===========> saveField");
    entityDao.saveField(names, values);
    }

    /**
     * 保存属性值
     * @param str
     */
    public void saveFields(String str,String cId){
    entityDao.saveFields(str,cId);
    }

    /**
     * 修改属性值
     * @param str
     */
    public void updateFields(String str,String cId){
    try{
    System.out.println("**************************************** " + cId);
    entityDao.updateFields(str,cId);
    }catch (Exception e) {
    e.printStackTrace();
    }
    }

    /**
     * 更新
     * @param contact
     */
    public void update(Contact contact){
    entityDao.update(contact);
    }

    public void delete(String contactId){
    entityDao.delete(contactId);
    }

    /**
     * 查询所有 特殊提醒为“有”的联系人
     * @return
     */
    public List findAll(){
    try {
    return entityDao.findAll();
    } catch (Exception e) {
    e.printStackTrace();
    return null;
    }

    }}这是ContactService所有的代码 。 还有我使用的是注解 。  要是没有实例的话 , 那我在Action层中查询应该也会报空指针 , 但是在Action层查询可以。就是一换到这个类中查询就不行了!