未找到类异常

时间:2015-02-07 10:47:35

标签: java reflection classnotfoundexception

我正在学习Java中的反思。我开始知道我们可以使用反射轻松提取类文件中使用的方法。

我有一个java类文件,它有很多方法。

测试文件是指我想要读取所用方法的java类,而testSample是我从我访问Testfile类方法的类

 public class testSample
    {

        public static void main(String args[]) throws ClassNotFoundException

        {

            File filename = new File(
                    "C:/ProgramData/Eclipse/Projects_3.7.1/Testfile.java");

            String filen = filename.toString();

            if (filen.endsWith(".java"))

            {

                String actfilename = StringUtils.substringBefore(filen, ".java");

                Class classname = Class.forName(actfilename);

                Method[] method = classname.getMethods();

                for (Method methods : method)

                {

                    System.out.println("Method name \r\n" + methods.getName());

                    Class[] parameters = methods.getParameterTypes();

                    for (Class parametername : parameters)

                    {

                        System.out.println("parameters name \r\n"
                                + parametername.getName());

                    }

                }

            }

        }
    }

请帮我解决这个问题。

我得到的异常错误如下

Exception in thread "main" java.lang.ClassNotFoundException: testFile
    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:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at com.TestSample1.retrievemethods(TestSample1.java:58)
    at com.TestSample1.filetraverse(TestSample1.java:43)
    at com.TestSample1.filetraverse(TestSample1.java:45)
    at com.TestSample1.main(TestSample1.java:22)

TESTFILE

非常感谢您提出的宝贵建议。但我还没有离开它。

让我说清楚。

static File appname="C:/programdata/eclipse/appname";

public static void main(String[] args) throws ClassNotFoundException 

{

        TestSample1 tf1=new TestSample1();

        tf1.filetraverse(appname);

}

public void filetraverse(File appname) throws ClassNotFoundException

{

        if (appname.isDirectory()) 

        {

            File[] files = appname.listFiles();

            for (File filename : files) 

            {

                    String finame=filename.getName().toLowerCase();

                    if(finame.endsWith("java"))

                    {

                            retrievemethods(filename,reflection);

                    }           

                            filetraverse(filename);     

            }           

        }

    }

public void retrievemethods(File filename,File reflection) throws 
ClassNotFoundException

    {

        String classna=filename.toString();

        String classnam=StringUtils.substringBetween(classna, "/appname/", ".java");

        Class reflectclass = Class.forName(classnam);

        Method[] method=reflectclass.getMethods();

        for (Method methods : method)

        {

            System.out.println("Method name \r\n"+methods.getName());

        Class[] parameters=methods.getParameterTypes();

        for (Class parametername : parameters) 

        {

            System.out.println("parameters name \r\n"+parametername.getName());

        }

    }

    }

我得到的错误是找不到类。

3 个答案:

答案 0 :(得分:0)

除非您在Classpath上编译了类,否则您的程序将无法运行。

Class.forName(String)的参数期望类路径上的类的完全限定名称,而不是文件路径

答案 1 :(得分:0)

Class classname = Class.forName(actfilename);

这里' actfilename'应该是完全限定的类名。

例如: 必填的班级名称 - com.organisation.reflection.Testfile 您的班级名称 - Testfile

当您调用Class.forName(" sampleClass")时,JVM会在运行时动态加载该类,并返回与" sampleClass"相关联的Class对象。

例如:

package com.organisation.reflection;

class TestFile {

static {

    System.out.println("TestFile class loaded.");
}

}

package com.organisation.reflection;

public class TestSample {

public static void main(String[] args) {
    try { 
        Class c   = Class.forName("com.organisation.reflection.TestFile"); 
    } catch (ClassNotFoundException e) {
    }

}

}

输出:

加载了TestFile类。

Check Class.forName here

答案 2 :(得分:0)

Hurrayy ......终于明白了...... :) :):D:D 非常感谢ppl ... :):)

public void retrievemethods(File filename,File reflection) throws ClassNotFoundException  
    {
        Class c=filename.getClass();
        Method[] method=c.getMethods();
        for (Method methods : method) 
        {
            System.out.println("new methods"+methods);
        }
    }