0

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

这是我正在使用的方法

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)
            {
            }
            
        }
 

这打印

这里 1

这里 2

这里 3

在这里 4

找不到类

这里 5

方法中是否缺少任何东西

4

2 回答 2

0

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

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

于 2013-06-16T17:58:20.260 回答
0

您正在传递 .java 文件,阅读有关类加载器的信息,它用于加载类而不是 java 文件。首先编译类,然后尝试加载它。(编译后你不必传递路径为

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

宁可通过

/Users/apple/Documents/Documents/workspace/UserTesting/src/

这应该可以工作。(假设您的类已编译并出现在上述目录中)

于 2013-06-16T18:06:06.897 回答