Click here to Skip to main content
11,706,007 members (47,525 online)
Rate this: bad
good
Please Sign up or sign in to vote.
See more: Java reflection
Hi,

I'd like to get all the methods from a file (.text or .java), but I don't know the file's name yet (the user can choose it with jFileChooser). So I don't know the class's name. I have this code:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
import javax.swing.JFileChooser;
 

public class Test {
 
   public static void main(String[] args) throws Throwable {
 
        JFileChooser fc = new JFileChooser();
        File f = null;
        if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
            f = fc.getSelectedFile();
        }
        int errorCode = com.sun.tools.javac.Main.compile(new String[]{
                    "-classpath", "bin",
                    "-d", "../Tmp",
                    f.getAbsolutePath()});
 

        System.out.println("errorCode:" + errorCode);
        File classesDir = new File("../Tmp");
 

        ClassLoader parentLoader = Test.class.getClassLoader();
 
        URLClassLoader loader1 = new URLClassLoader(
                new URL[]{classesDir.toURL()}, parentLoader);
 
        BufferedReader br = new BufferedReader(new FileReader(f));
        String load = "";
        while ((load = br.readLine()) != null) {
            if (load.startsWith("package")) {
                load = load.replaceAll("package", "") + "." + f.getName().substring(0, f.getName().indexOf("."));
                load = load.replace(";", "").trim();
                break;
            }
        }
        Class cls1 = loader1.loadClass(load);
        Method[] methods = cls1.getDeclaredMethods();
        for (Method m : methods) {
            System.out.println(m.getName());
        }
    }
}

It works, if the class doesn't contains "extends", or uses another class's methods, but if it do, I get errors.
What should I do to fix these problems? I think it has to do something with "classpath" and "bin"
Posted 10-Nov-12 13:15pm
Comments
Sergey Alexandrovich Kryukov at 10-Nov-12 22:07pm
   
Errors? You need to tell us exact error messages; in what line, etc.
--SA
AllainLG at 11-Nov-12 6:26am
   
If the file contains "extends":
<pre lang="java">error: cannot find symbol
public class RefactorMuveletek extends MasikOsztaly{</pre>

If the input's class is connected to another class:
<pre lang="java">
Exception in thread "main" java.lang.ClassNotFoundException: csomag.eolvasottOsztalyNev
errorCode:1

Exception while removing reference: java.lang.InterruptedException
java.lang.InterruptedException
</pre>

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 196
1 Sergey Alexandrovich Kryukov 151
2 ppolymorphe 61
3 Inimicos 60
4 ProgramFOX 50
0 OriginalGriff 9,050
1 Sergey Alexandrovich Kryukov 8,417
2 CPallini 5,189
3 Maciej Los 4,726
4 Mika Wendelius 3,636


Advertise | Privacy | Mobile
Web04 | 2.8.150819.1 | Last Updated 10 Nov 2012
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100