ClassNotFoundException:demo.A ||即使类名是包限定的

时间:2016-04-25 23:55:30

标签: java classnotfoundexception

我有一个分析包的各个方面的文件DA。 (由要分析的文件组成的文件夹的名称始终与包名称相同)

import java.io.File;  
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.*;
import java.lang.reflect.*;    
public class DA {
        ArrayList<Class> classes;


        int numberOfClasses;
        String packageName;

        public static void main(String[] args) throws IOException, ClassNotFoundException {
            DA fl = new DA();
                fl.loadPackage(args[0]);
                fl.table();
        }

        public void loadPackage(String path) throws IOException, ClassNotFoundException {

            Set<Class> set = new HashSet<Class>();
            System.out.println("Gathering class files in " + path);    

            FilenameFilter classFilter = new FilenameFilter() {
                public boolean accept(File dir, String name) {
                    return name.toLowerCase().endsWith(".class");
                }
            };


            String className;

            File f = new File(path); // the directory, really!
            int n = 0;

            for (File file : f.listFiles(classFilter)){
                System.out.println(file.getName());
                this.packageName =  f.getName().toLowerCase();

                className = file.getName().substring(0, file.getName().length()-6);
                System.out.println(packageName + "." +className);
                Class<?> cl = Class.forName(packageName + "." +className);
                set.add(cl);
                n++;
            }

            this.classes = new ArrayList<Class>(set);
            this.numberOfClasses = n;
        } 

为了测试,我正在设置DA.jar的类路径,并使用一个demo.java文件,该文件包含一个名为&#34; demo&#34;的包。包中有A,B,C,D,E和F类。

这些是我在命令行中所做的事情,我得到了正确的类名&#34; demo.A&#34;这确实是合格的班级名称。

Demo.java

package demo;


class A {
    public void meth1() {
        System.out.println("calling " + getClass() + ".meth1");
    }

    public void meth2() {
        System.out.println("calling " + getClass() + ".meth2");
    }
}

class B extends A {
    public void meth1() {
        System.out.println("calling " + getClass() + ".meth1");
    }

    public void meth2() {
        System.out.println("calling " + getClass() + ".meth2");
    }
}

class C extends B {
    public void meth1() {
        System.out.println("calling " + getClass() + ".meth1");
    }

    public void meth2() {
        System.out.println("calling " + getClass() + ".meth2");
    }

    public void meth3() {
        System.out.println("calling " + getClass() + ".meth3");
    }

    public void meth4() {
        System.out.println("calling " + getClass() + ".meth4");
    }
}

class D {
    private B b = new B();
    public void meth1() {
        System.out.println("calling " + getClass() + ".meth1");
    }
}

class E {
    public void meth1(D d, A a) {
        System.out.println("calling " + getClass() + ".meth1");
    }

    public void meth2() {
        System.out.println("calling " + getClass() + ".meth2");
    }
}

class F {
    private D d = new D();
    public void meth1(E e) {
        System.out.println("calling " + getClass() + ".meth1");
    }

    public void meth2() {
        System.out.println("calling " + getClass() + ".meth2");
    }
}


public class Demo {

    public static void main(String[] args) {
        A a = new A();
        a.meth1();
        a.meth2();
        B b = new B();
        b.meth1();
        b.meth2();
        // etc.
    }
}

Command Line Screenshot

我之前通过eclipse运行这个程序。我有一个名为&#34; Demo&#34;我在Run Configuration中添加了类路径。我还通过运行配置中的Argument将参数提供给由Demo.java和所有.class文件组成的文件夹。原因可能是我的.class文件和Demo.java位于不同的地址中? (eclipse项目的src文件夹中的demo.java。以及桌面\ demo中的所有.class和demo.java的副本)

0 个答案:

没有答案