A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙浩迪 中级黑马   /  2012-6-29 13:58  /  4909 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 sunhaodi 于 2012-6-29 16:45 编辑

package EightDemo;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;


/*8、已知一个类,定义如下:
package cn.itcast.heima;
   public class DemoClass {
          public void run()
          {
             System.out.println("welcome to heima!");
          }   
  }
(1) 写一个Properties格式的配置文件,配置类的完整名称。
(2) 写一个程序,读取这个Properties配置文件,获得类的完整名称并加载这个类,用反射的方式运行run方法。*/




class Test{

           public void run(){
                  
                   System.out.println("welcome to heima!");
                  
           }

}
public class PropertiesDemo {
        
         
          public static void main(String[] args)throws Exception{

                     InputStream  in= PropertiesDemo.class.getClassLoader()
                                     .getResourceAsStream("prop.properties");

                                Properties pro =  new  Properties();
                                pro.load(in);
                            in.close();
                           
                                 String className = pro.getProperty("prop");
                                 Class c=Class.forName(className); // 这个报异常 atEightDemo.PropertiesDemo.main(PropertiesDemo.java:46)     

  
                                 Object ob=c.newInstance();
                                 Method m=c.getMethod("run");
                                 m.invoke(ob);
               
                        
                                 
                                 /*  Enumeration en = pro.propertyNames();
                                   while (en.hasMoreElements()) {
                                          
                                    String key = (String) en.nextElement();
                                    String Property = pro.getProperty(key);
                                    System.out.println(key + Property);
*/

                                 //  }
                        }
        }

异常是:
Exception in thread "main" java.lang.ClassNotFoundException: Test
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at EightDemo.PropertiesDemo.main(PropertiesDemo.java:46)

我的配置文件在src目录下prop.properties ,   配置文件件里面是prop=Test通过这个配置文件用反射技术并加载上面的run 方法,打印。
配置文件:prop=Test

文件的位置和配置文件里面的东西:

        

未命名.1jpg.jpg (1.92 KB, 下载次数: 69)

未命名.1jpg.jpg

未命名.jpg (18.84 KB, 下载次数: 55)

未命名.jpg

9 个回复

倒序浏览
类的路径  你用包名.类名试试
回复 使用道具 举报
黄克帅 发表于 2012-6-29 14:48
类的路径  你用包名.类名试试

哪里用包名.类名??  没明白,说的详细点。。 谢谢了
回复 使用道具 举报
你的prop.properties配置文件中的 定义的要执行的 类名应该为 cn.itcast.heima.DemoClass  你可能直接写的是 DemoClass,没有加包名。
回复 使用道具 举报
唐志兵 发表于 2012-6-29 16:15
你的prop.properties配置文件中的 定义的要执行的 类名应该为 cn.itcast.heima.DemoClass  你可能直接写的 ...

好了。 真是这个错。。
回复 使用道具 举报
哥们,我前边的类建立了
package cn.itcast.heima;
   public class DemoClass {
          public void run()
          {
             System.out.println("welcome to heima!");
          }   
  }
配置文件里写成 pro= cn.itcast.heima.DemoClass怎么又提示:
Exception in thread "main" java.lang.ClassNotFoundException: cn.itcast.heima.DemoClass
这个错误,希望解说,
回复 使用道具 举报
常佳杰 发表于 2012-7-3 11:47
哥们,我前边的类建立了
package cn.itcast.heima;
   public class DemoClass {

你得根居你自己的包和类相对写的,别看这个怎么写你就怎么写啊
回复 使用道具 举报
呵呵 其实我的包不是那个,只是想让你清楚我问的,我的包和配置文件里写的一样,就是提示错误
回复 使用道具 举报
孙浩迪 发表于 2012-6-29 16:44
好了。 真是这个错。。

学习了,非常感谢
回复 使用道具 举报
rehan 中级黑马 2015-2-23 11:36:54
10#
这道题目完全不懂,卡在这里了,MD。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马