package com.xyls.spring;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Properties;import com.sun.org.apache.commons.beanutils.BeanUtils;public class ActionFactory {
//private static URI uri;

public static Action getAction(String actionName){

Properties p = new Properties();

/*FileInputStream fis = (FileInputStream) ActionFactory.class.getClassLoader().
getResourceAsStream("config.properties");*/
try {
//URI uri = ActionFactory.class.getClassLoader().getResource("config.properties").toURI();
//p.load(new FileInputStream(new File(uri)));
//p.load(new FileInputStream("config.properties"));

p.load(ActionFactory.class.getClassLoader().getResourceAsStream("config.properties"));

String actionImplName = (String) p.getProperty(actionName);


String actionMessage = (String) p.getProperty(actionName+"_msg");

Object obj = Class.forName(actionImplName).newInstance();
//BeanUtils是Apache Commons BeanUtils提供的辅助类
BeanUtils.setProperty(obj, "message", actionMessage);
return (Action) obj;
} catch (IOException e) {

e.printStackTrace();
} catch (InstantiationException e) {

e.printStackTrace();
} catch (IllegalAccessException e) {

e.printStackTrace();
} catch (ClassNotFoundException e) {

e.printStackTrace();
} catch (InvocationTargetException e) {

e.printStackTrace();
} /*catch (URISyntaxException e) {

e.printStackTrace();
}*/
return null;

}

public void testFactory(){
Action action = ActionFactory.getAction("theAction");
System.out.println(action.execute("actionfactory"));
}

public static void main(String[] args) {
new ActionFactory().testFactory();
//System.out.println(new ActionFactory().getAction("theAction"));
}}
异常:Exception in thread "main" java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at com.xyls.spring.ActionFactory.getAction(ActionFactory.java:28)
at com.xyls.spring.ActionFactory.testFactory(ActionFactory.java:63)
at com.xyls.spring.ActionFactory.main(ActionFactory.java:68)config.properties属性文件放在src下,内容为
theAction=com.xyls.spring.impl.UpperAction
theAction_msg=hello

解决方案 »

  1.   

    ActionFactory.class.getClassLoader().getResourceAsStream("config.properties") 
    返回的null吧
    看看是不是路径的问题
      

  2.   


    换种方式 保证你ok
    ActionFactory.class.getResourceAsStream("/com/test/config.properties");
    /com/test 是你的 文件 所在的包名 ,替换成你的。。试试。
    注意 com前面 的/ 不能 缺少。、、。 
      

  3.   

    报了这样的异常Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.xyls.spring.ActionFactory.getAction(ActionFactory.java:37)
    at com.xyls.spring.ActionFactory.testFactory(ActionFactory.java:63)
    at com.xyls.spring.ActionFactory.main(ActionFactory.java:68)
    Caused by: com.sun.org.apache.commons.logging.LogConfigurationException: com.sun.org.apache.commons.logging.LogConfigurationException: java.lang.NullPointerException (Caused by java.lang.NullPointerException) (Caused by com.sun.org.apache.commons.logging.LogConfigurationException: java.lang.NullPointerException (Caused by java.lang.NullPointerException))
    at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:543)
    at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
    at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
    at com.sun.org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)
    at com.sun.org.apache.commons.beanutils.BeanUtils.<clinit>(BeanUtils.java:111)
    ... 3 more
    Caused by: com.sun.org.apache.commons.logging.LogConfigurationException: java.lang.NullPointerException (Caused by java.lang.NullPointerException)
    at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:397)
    at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529)
    ... 7 more
    Caused by: java.lang.NullPointerException
    at com.sun.org.apache.commons.logging.impl.LogFactoryImpl.getLogConstructor(LogFactoryImpl.java:374)
    ... 8 more
      

  4.   


    返回的是null,我的配置文件就放在src下
      

  5.   

    getSystemResourceAsStream(String name) 
              从用来加载类的搜索路径打开具有指定名称的资源,以读取该资源。config.properties 文件要加到 CLASSPATH 里。