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ファイルではなくクラスをロードするために使用されます. クラスをロードするよりも、最初にクラスをコンパイルします。

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

むしろ合格

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

これはうまくいくはずです(あなたのクラスがコンパイルされ、上記のディレクトリに存在すると仮定します)

于 2013-06-16T18:06:06.897 に答える
0

.javaクラスをロードしようとすることで、ファイルをロードします。最初に を にコンパイル.javaして.classからロードする必要があります。.javaJava Compiler API を使用してファイルを動的にコンパイルできます。

コンパイル時にすでにソースがある場合 (実行時に two.java の内容を生成しない場合) はClass.forName("two");classLoader.loadClass("two").

于 2013-06-16T17:58:20.260 に答える