Как запустить исходный код Java в программе Java - PullRequest
5 голосов
/ 11 февраля 2011

Я написал некоторый код для компиляции исходного кода Java. Затем он создает файл .class. Проблема в том, как мне его запустить?

Например, я в порядке с названием программы и устанавливаемого класса, я использовал prog p = new prog (), в этом случае, однако, файл класса еще не существует, пока я его не скомпилирую. Не совсем уверен, что делать. Может кто-нибудь дать мне совет?

кстати, класс выглядит так:

public void compile{
  JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();  
  int compilationResult = compiler.run(null, null, null, fileToCompile);  
}

public void run(){
  Prog prog = new Prog();
  prog.run();
}

Ответы [ 3 ]

5 голосов
/ 11 февраля 2011

Если вы просто хотите запустить его, вы можете запустить процесс Java, используя Runtime.exec или ProcessBuilder . Это создаст отдельный Java-процесс для запуска вашей Java-программы. Это более вероятно, что вы хотите. Вы можете по существу сделать Equivelant из:

>java someClass

из вашего приложения. Эта ссылка может помочь.

Если вы действительно хотите загрузить файл класса и использовать его в своем текущем приложении, я думаю, что-то вроде this или динамической загрузки Java-классов должно помочь. В основном (прямо по ссылке, слегка изменено):

public class MainClass {

  public static void main(String[] args){

    ClassLoader classLoader = MainClass.class.getClassLoader();

    try {
        Class aClass = classLoader.loadClass("MyClass");
        System.out.println("aClass.getName() = " + aClass.getName());
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

}

После загрузки класса у вас есть объект Class , и вы можете создать экземпляр класса, представленного aClass, вызвав aClass.newInstance(), что похоже на

MyClass newObj = new MyClass()

Или вы можете использовать любой другой метод, который предоставляет объект Class.

Как указал davmac, приведенный выше пример кода предполагает, что загружаемый код находится в пути к классам ваших приложений. Если файлы классов, которые вы хотите запустить, не находятся в вашем пути к классам, вы можете посмотреть URLClassLoader

3 голосов
/ 11 февраля 2011

Загрузить его на URLClassLoader.

File root = new File("/java"); // The package root.
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() });
Class<?> cls = Class.forName("test.Test", true, classLoader); // Assuming package test and class Test.
Object instance = cls.newInstance();
// ...

Смотри также:

1 голос
/ 11 февраля 2011

Вам необходимо создать загрузчик классов (вероятно, будет хорошо URLClassLoader), который будет загружать только что скомпилированный файл класса. (Таким образом, для URLClassLoader путь вывода компиляции должен быть одним из URL).

Затем загрузите скомпилированный класс с помощью загрузчика классов и выполните его, используя отражение.

Class c = cl.loadClass("ClassName");

... и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...