找不到要动态执行的文件

时间:2013-06-16 17:51:33

标签: java eclipse dynamic-execution

我正在使用动态执行,但它告诉我虽然我仔细检查了路径并且它是正确的但是找不到类

这是我正在使用的方法

public static void runIt(String fileToCompile) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException, SecurityException, NoSuchMethodException
        {System.out.println("Entered runIt()");
            String r2="";
File file=File("/Users/apple/Documents/Documents/workspace/UserTesting/src/two.java");
            System.out.println("The path of the file is "+fileToCompile);
            System.out.println("HERE 1");
            try
            {
                // Convert File to a URL
                URL url = file.toURL(); // file:/classes/demo
                URL[] urls = new URL[] { url };
                System.out.println("HERE 2");
                // Create a new class loader with the directory
                ClassLoader loader = new URLClassLoader(urls);
                System.out.println("HERE 3");
                System.out.println("HERE 4");
                Class<?> thisClass=null;
                try{
                thisClass = classLoader.loadClass("two");
                }
                catch(ClassNotFoundException e){
                    System.out.println("Class not found");
                }
                System.out.println("HERE 5");
                Object newClassAInstance = thisClass.newInstance();
                System.out.println("HERE 6");

                Class params[] = new Class[1];
                params[0]=String[].class;
                Object paramsObj[] = {};
                String m=null;
                Object instance = thisClass.newInstance();
                System.out.println("HERE 7");
                Method thisMethod = thisClass.getDeclaredMethod("main", params);
                System.out.println("HERE 8");
                String methodParameter = "a quick brown fox";
                // run the testAdd() method on the instance:
                System.out.println((String)thisMethod.invoke(instance,(Object)m));


            }
            catch (MalformedURLException e)
            {
            }

        }

打印

  

HERE 1

     

HERE 2

     

HERE 3

     

HERE 4

     

未找到班级

     

HERE 5

方法

中是否缺少任何内容

2 个答案:

答案 0 :(得分:0)

通过尝试加载类来加载.java文件。首先,您必须将.java编译为.class,然后才加载它。您可以通过Java Compiler API动态编译.java文件。

如果您已在编译时获得源代码(在运行时未生成two.java的内容),则应调用Class.forName("two");而不是classLoader.loadClass("two")

答案 1 :(得分:0)

您正在传递.java文件,读取类加载器,它用于加载类而不是java文件。首先编译该类,而不是尝试加载它。(一旦编译,你就不必将路径作为

传递

/Users/apple/Documents/Documents/workspace/UserTesting/src/two.class

宁愿传递

/用户/苹果/文档/文档/工作区/ UserTesting / SRC /

这应该有用。(假设您的课程已编译并出现在上述目录中)