1

I would like to instantiate a new class object form external location collected from user input. The program asks the user where the file is, say /tmp/MyTestClass.java. I would then like it to grab that .java file and make it a usable class with in the program. so i could call something like MyClass = new MyTestclass(). I've been looking around and can't seem to find an answer or if its even possible? Any information would be useful.

Thanks!!

-----------EDIT---------------

I may have been over thinking my problem. This is for a JUnit test (sorry should have mentioned this before). Below is an example of what i was using to pull in my static class. I would like to be able to dynamically pull the JUnit test file from user input. testcastjunit was the name of the class. I need to be able to programmaticly get the class from the users input and run the test case.

org.junit.runner.Result result = JUnitCore.runClasses(**testcastjunit.class**);
            for (Failure failure : result.getFailures()) {
                System.out.println(failure.toString());
            }
4

2 に答える 2

4

私があなたを理解したなら、これはあなたが必要とするものです:

JavaCompiler jCompiler = ToolProvider.getSystemJavaCompiler();
List<String> options = Arrays.asList(
                           "-d", "./bin/",
                           path+".java");
int compilationResult = jCompiler.run(null, null, null, 
                options.toArray(new String[options.size()]));
if (compilationResult == 0) {
    mensaje = "Compiled the "+path+" to its .class";
    ClassLoader cLoader = ClassLoader.getSystemClassLoader();
    try {
        cLoader.loadClass("THE CLASS");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
} else {
    mensaje = "Couldnt compile.";
}

これはあなたのために働くでしょう:

  1. クラスをコンパイルするためにJavaコンパイラを取得します。
  2. オプションを作成します。-d は、一度コンパイルした .class を配置する場所であり、2 番目のオプションは .java ファイルのパスです。
  3. コンパイルし、コンパイルが成功するとクラスをロードします。
  4. あなたのクラスを使い始めましょう!
于 2012-10-25T19:15:11.447 に答える
1

Javier のアドバイスのおかげで、プログラムを動的にコンパイルして JUnit テスト ケースを実行することができました。これを使用して、Selenium IDE でエクスポートされた .java ファイルを実行しています。以下は私の完成した例です。これが、同様の解決策を探している他の人に役立つことを願っています。別のメモ私は開発に Eclipse IDE を使用しています。ハッピー コーディング!

    //the loc and name variables are gathered from user input
    String fileloc = loc +"/"+ name + ".java";
    JavaCompiler jCompiler = ToolProvider.getSystemJavaCompiler();
    List<String> options = Arrays.asList("-d", "./bin/",fileloc);

    int compilationResult = jCompiler.run(null, null, null, 
            options.toArray(new String[options.size()]));
    if (compilationResult == 0){
        //This is the package name exported from selenium IDE exported files
        File file = new File("./bin/com/example/tests/" + name);
        URL url = null;
        try {
            url = file.toURL();
            URL[] urls = {url};
            ClassLoader cl = new URLClassLoader(urls);
            org.junit.runner.Result result = JUnitCore.runClasses(cl.loadClass
                    ("com.example.tests." + name));
            for (Failure failure : result.getFailures()) {
                System.out.println(failure.toString());
            };
        } catch (MalformedURLException e) {
            System.out.println("Error with file location (URL)");
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            System.out.println("Couldn't Not Find Test Class To Load");
            e.printStackTrace();
        }
    }else{
        System.out.println("Could not Find Java Source File Located in `" + fileloc + "`");
        System.exit(1);
    }
}
于 2012-10-29T16:13:33.740 に答える