2015-12-10 2 views
3

Я хотел бы получать результаты динамически вызывать класс в другой банке.Как вызвать класс Java другого Jar-файла?

Например,

'A' каталог в файле с именем a.jar.

«B» в файле с именем B.jar.

Я хочу динамически вызывать класс файла A.jar в файл B.jar.

Это основной класс файла A.jar.

Socket и RMI не учитываются, потому что технология обмена сообщениями.

Main Class (b.jar)

public class main { 
public static void main(String[] args) { 
    //It dynamically creates an object of a Message Class in A.jar. 
    //And it invoke the getMessage function. 
    //And Save the return value. 

}} 

Message Class (a.jar)

public class message{ 
    public String getMessage(){ 

     return "Hello!"; 
    } 
} 
+0

от 'dynamically', вы имеете в виду имя класса как String? Можно ли предположить, что 'A.jar' находится в пути к классам? –

+0

Да. Он должен вызывать класс A.jar по имени класса (string). – user3736174

+0

Вам нужна комбинация http://stackoverflow.com/questions/9886266/is-there-a-way-to-instantiate-a-class-by-name-in-java и http://stackoverflow.com/ questions/2407071/how-to-invoke-a-method-in-java-using-reflection –

ответ

5

Во-первых, вам нужно динамически создать экземпляр данного класса:

Class<?> clazz = Class.forName("message"); 
Object messageObj = clazz.newInstance(); 

Thi s предполагает, что файл .jar, который содержит класс message, находится на classpath, так что среда выполнения Java может его найти. В противном случае вам нужно вручную загрузить файл jar через загрузчик классов, например. как в How should I load Jars dynamically at runtime?. Принято считать, что ваш файл A.jar который содержит message класса находится в c:\temp\A.jar, вы можете использовать что-то вроде

URLClassLoader child = new URLClassLoader (
     new URL[] {new URL("file:///c:/temp/A.jar")}, main.class.getClassLoader()); 
Class<?> clazz = Class.forName("message", true, child); 

для загрузки файла банки и загрузить класс сообщений от него.

В обоих случаях, вы можете получить метод из класса и вызывать его на созданном экземпляре:

Method getMessage = clazz.getMethod("getMessage"); 
String result = (String) getMessage.invoke(messageObj); 
+0

Спасибо за ответ. Как я могу вызвать класс в другом файле jar? – user3736174

+0

До тех пор, пока другой файл jar находится на пути к классам, работает описанный выше подход. В противном случае вам необходимо динамически загружать файл jar во время выполнения через загрузчик классов. –

+0

Я не уверен, как подойти к данному ответу. где я могу найти хороший пример. – user3736174

Смежные вопросы