黑马程序员技术交流社区

标题: 反射问题 [打印本页]

作者: 程玉习    时间: 2014-1-4 19:35
标题: 反射问题
报错:Exception in thread "main" java.lang.ClassNotFoundException: "java.util.ArrayList"
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:190)
        at com.itheima.day1.ReflectTest_2.main(ReflectTest_2.java:23)

config.properties已经创建了啊,为什么还是错,求大神指点。。


package com.itheima.day1;

import java.io.InputStream;
import java.util.*;

public class ReflectTest_2
{

        /**
         * @param args
         */
        public static void main(String[] args) throws Exception
        {
//                InputStream is = new FileInputStream("config.properties");
               
                InputStream is = ReflectTest_2.class.getResourceAsStream("config.properties");
               
                Properties pros = new Properties();
                pros.load(is);
                is.close();
               
                String className = pros.getProperty("className");
                Collection collections = (Collection)Class.forName(className).newInstance();
                //Collection collections = new HashSet<>();
               
                ReflectPoint rp1 = new ReflectPoint(3, 3);
                ReflectPoint rp2 = new ReflectPoint(5, 5);
                ReflectPoint rp3 = new ReflectPoint(3, 3);
               
                collections.add(rp1);
                collections.add(rp2);
                collections.add(rp3);
                collections.add(rp1);
               
                System.out.println(collections.size());
        }

}



作者: 高亮亮    时间: 2014-1-4 19:47
本帖最后由 高亮亮 于 2014-1-4 21:18 编辑

估计是你声明输入流的时候,参数传递出问题,路径不对.

建立输入流的时候,参数是File或者String.默认是以你该文件存在目录作为父路径的.
不管是File还是String,这个文件必须不是文件夹,且必须存在,并且路径正确.所以,推荐你用全路径,甚至从盘符开始标搞起...
作者: 其LovE斤    时间: 2014-1-4 19:57
java.lang.ClassNotFoundException: "java.util.ArrayList"
config.properties已经创建了啊,为什么还是错,求大神指点。。
好好看看,不是找不到 config.properties   
是你config.properties     中写的有问题。找不到你里面写的东西。

ReflectTest_2.class.getResourceAsStream("config.properties");
你用的是隐式调用当前类的类加载器在加载config.properties配置文件。那么你这个配置文件就需要跟你当前类处于同一个文件夹下。用开发工具eclipse之类的话,就是同一个包下。
作者: 程玉习    时间: 2014-1-4 20:40
其LovE斤 发表于 2014-1-4 19:57
java.lang.ClassNotFoundException: "java.util.ArrayList"
config.properties已经创建了啊,为什么还是错 ...

用的是eclipse在包下了。。。这样写的  className="java.util.ArrayList"
作者: 程玉习    时间: 2014-1-4 20:42
高亮亮 发表于 2014-1-4 19:47
估计是你声明输入流的时候,参数传递出问题,路径不对.

建立输入流的时候,参数是File或者String.默认是以你 ...

放在包下了,试试全路径。。。。
作者: 高亮亮    时间: 2014-1-4 21:09
程玉习 发表于 2014-1-4 20:42
放在包下了,试试全路径。。。。

难道放在包下就不能试全路径是否可行么?
想解决问题,有可能,就去试.
作者: hurryup    时间: 2014-1-4 21:11
照你描述的情形,应该是配置文件config.properties的路径不正确的问题导致的,即该文件不在当前的路径下。可以通过file.getAbsolutePath()获得它的一个真实路径,然后把它移到eclipse的工作目录(workspace)\你建的工程目录\就可以了
作者: 李兴    时间: 2014-1-4 21:25
找到原因了,你将配置文件改成这样吧
  1. className=java.util.ArrayList
复制代码

因为你的
String className = pros.getProperty("className");
得到的className的值为"java.util.ArrayList",带着引号,当然虚拟机就找不到这个类了
作者: 程玉习    时间: 2014-1-4 21:27
李兴 发表于 2014-1-4 21:25
找到原因了,你将配置文件改成这样吧

因为你的

哦了,我写错了。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2