Запустите внешний Java-класс (проекты) - PullRequest
1 голос
/ 01 декабря 2011

Я хочу запустить внешний Java-проект (класс) из Java-проекта.Я не имею в виду какую-либо программу (например, EXE-файлы), а Java-классы (проекты).

Давайте рассмотрим, есть ли у вас путь к файлу класса в строке:

String = "C:\\test\\test.class";

Ответы [ 3 ]

4 голосов
/ 01 декабря 2011

Это ответственность ClassLoader.Если у вас есть внешние .class файлы на диске, которые вы хотите создать / использовать, то это довольно просто, если вы знаете о доступных API:

File f = ...; // Folder containing the .class files

ClassLoader loader = new URLClassLoader(new URL[] { f.toURI().toURL() }, getClass().getClassLoader(););
for (File classFile : f.listFiles(new FilenameFilter() {
    public boolean accept(File dir, String name) {
        return name.endsWith(".class");
    }
})) {
    try {
        String filename = classFile.getName();
        // Remove the .class extension
        Class<?> cls = loader.loadClass(filename.substring(0, filename.length() - 6));
        // Do something with the class
    } catch (Exception ex) {
        LOGGER.error("Unable to load plugin: " + ex.getMessage());
    }
}
2 голосов
/ 01 декабря 2011

Помимо вашего довольно четкого тона, кажется, что вам нужна какая-то структура плагинов.

В принципе вам понадобится ClassLoader, который будет загружать нужные вам классы / библиотеки.Как только они загружены, вы можете использовать их.

Может быть, это поможет вам: Как загрузить файл JAR во время выполнения

0 голосов
/ 01 декабря 2011

«Запуск» другой java-программы выполняется путем вызова ее основного метода.Скажем, у вас есть класс net.tilialacus.TheProg, который вы хотите запустить, затем вы можете сделать (в другой Java-программе)

String[] args = {"arg1", "arg2"}; 
net.tilialacus.TheProg.main(args);

или с помощью отражения, если класс не известен во время компиляции:

    Class<?> theClass = Class.forName("net.tilialacus.TheProg");
    Method method = theClass.getDeclaredMethod("main", String[].class);
    String[] args = { "arg1", "arg2"};
    method.invoke(null, (Object)args);

Конечно, вам нужно обрабатывать исключения, если класс не существует или не имеет метода "public static main (String [])".

...