2014-06-14 9 views
0

나는 특정 클래스 (HUserDao)지도 (HDaoFactory.creators) 클래스 (HUser.class) 우리에게 열쇠로 새로운 인스턴스를 얻으려면 DAO 개체 공장을 구현하려고합니다. NPE가 위임하는 동안 던졌습니다

는이 코드를 가지고 :
package com.hxx.model.dao;  
public interface DaoFactory { 
     GenericDao getDao(Class dtoClass); 
    } 


package com.hxx.model.dao; 
import java.util.Map; 
public class HDaoFactory implements DaoFactory { 

    public static Map<Class, DaoCreator> creators; 

    public interface DaoCreator { 
     public GenericDao create(); 
    } 

    @Override 
    public GenericDao getDao(Class dtoClass) { 
     DaoCreator creator = creators.get(dtoClass); 
     if (creator == null) { 
     } 
     return creator.create(); 
    } 

} 

그리고 정적 초기화 블록 실행 중

:

package com.hxx.model.core; 

import com.hxx.model.dao.HDaoFactory; 
import com.hxx.model.dao.HUserDao; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class HUser extends HObjectAbstract { 
    public HUser() { 
    } 

    static { 
     try { 
      HDaoFactory.creators.put(HUser.class, new HDaoFactory.DaoCreator() { 
       @Override 
       public GenericDao create() { 
        return new HUserDao(); 
       } 
      }); 
     } catch(Exception ex) { 
      Logger.getLogger(HUser.class.getName()).log(Level.SEVERE, 
       HUser.class.getName().concat(".<init>: creating of dao instance has failed.")); 
       ex.printStackTrace(System.out); 
     } 
    } 

슬로우하는 NPE :

SEVERE: com.hxx.model.core.HUser.<init>: creating of dao instance has failed. 
INFO: java.lang.NullPointerException 
    at com.hxx.model.core.HUser.<clinit>(HUser.java:48) 
    at com.hxx.controller.UserBean.<init>(UserBean.java:43) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at java.lang.Class.newInstance0(Class.java:357) 
    at java.lang.Class.newInstance(Class.java:310) 
    at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:188) 
    at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:102) 
    at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409) 
    at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269) 

은 내가 잘못 무엇인가?

+0

가능한 [null 포인터 예외 란 무엇이며 어떻게 수정합니까?] (http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) –

+0

'creators'를 초기화하는 걸 잊었습니다 – dacongy

답변

0

creators지도가 초기화되지 않은 것 같습니다. 결과는 NullPointerException입니다. 좋은 스레드 here 매우 명확하게 NPE를 추적하는 방법을 설명합니다.

+0

Greate thanx! 그것은 어리석은 실수였습니다. – PavelPraulov

+0

항상 그런 일이 있습니다. 중요한 점은 스택 추적을 분석하여 직접 문제의 원인을 파악하는 것이 매우 쉽다는 것입니다. –