2011-08-24 4 views
1

J'ai un fichier jar, que je charge dynamiquement lors de l'exécution de mon fichier java (disons my.java). je le fais de cette façon:appeler une méthode à partir d'un fichier java à l'intérieur d'un jar

File newFile = new File("path"); 

JarFile newJar= new JarFile(newFile); 

Maintenant, il y a un fichier java particulier dans ce pot, que je connais le nom de (dire known.class). Je veux créer un objet de cette classe connue et appeler une méthode à l'intérieur depuis my.java.

Je ne sais pas trop comment m'y prendre. Quelqu'un peut-il aider? J'ai essayé de chercher en ligne, mais je n'ai rien trouvé d'utile.

Merci.

Répondre

1

Vous avez besoin d'un fichier .class (code java compilé) dans le fichier jar, et non d'un fichier .java. Si vous avez ceci, ajoutez le .jar à votre chemin de classe, ou à l'un des répertoires de votre chemin de classe, et vous pouvez simplement référencer l'objet à partir de votre code Java.

Ie:

MyObject newObj = new MyObject(); 

Voici comment votre spécifier le pot dans le classpath:

java -classpath ".;myjar.jar" org.mine.MyClass 

Edit: Puisque vous ne voulez pas changer le classpath, essayer quelque chose comme ceci:

File file = new File("/path/to/myjar.jar"); 
URL url = file.toURL(); 
URL[] urls = new URL[]{url}; 
ClassLoader cl = new URLClassLoader(urls); 

Class cls = cl.loadClass("org.mine.myclass") 
+0

Désolé, le fichier jar possède le fichier .class. Je vais éditer la question. Mais oui, je ne veux pas l'ajouter au classpath. Je veux le charger à la volée. – rgamber

+0

Ok édité - essayez comme ça. –

+0

Merci pour l'aide! – rgamber

1

Vous devez créer un URLClassLoader et non un JarFile. La lecture du document pour ClassLoader va vous aider, et aussi pour Class.

Questions connexes