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

Мне нужно скомпилировать и запустить исходный код (один файл), написанный на Python, Pascal или C, из моего приложения Java.

Мне нужно знать:

  • если процесс компиляции был успешным
  • обратный вывод скомпилированной программы

Как мне это сделать?

Ответы [ 5 ]

1 голос
/ 07 мая 2011

Я делал то же самое ..

public String compile()
       {
           String log="";
            try {
                String s= null;
              //change this string to your compilers location
            Process p = Runtime.getRuntime().exec("cmd /C  \"C:\\Program Files\\CodeBlocks\\MinGW\\bin\\mingw32-g++.exe\" temp.cpp ");

            BufferedReader stdError = new BufferedReader(new 
                 InputStreamReader(p.getErrorStream()));
            boolean error=false;

            log+="\n....\n";
            while ((s = stdError.readLine()) != null) {
                log+=s;
                error=true;
                log+="\n";
            }
            if(error==false) log+="Compilation successful !!!";

        } catch (IOException e) {
            e.printStackTrace();
        }
            return log;
       }


     public int runProgram() 
       {
           int ret = -1;
          try
            {            
                Runtime rt = Runtime.getRuntime();
                Process proc = rt.exec("cmd.exe /c start a.exe");
                proc.waitFor();
                ret = proc.exitValue();
            } catch (Throwable t)
              {
                t.printStackTrace();
                return ret;
              }
          return ret;                      
       }  

Это две функции, использованные в моем MiDE, первая из которых использовалась для компиляции.Измените адрес на местоположение вашего компилятора.и возвращает журнал (в случае, если компиляция не удалась), чтобы увидеть ошибки.

2-й запускает скомпилированный код.Возврат кода завершения для проверки правильности его завершения.

Я не очень хороший Java-кодер.Я думаю, вы можете улучшить мой код намного лучше;) .. если вы, пожалуйста, сообщите мне.И я также ищу ответ на как общаться с созданным процессом

1 голос
/ 13 апреля 2011

В общем, вы захотите запустить Process, который запускает внешнюю программу (сначала компилятор, а затем скомпилированный двоичный файл в вашем случае), используя либо Runtime.getRuntime().exec(), либо ProcessBuilder для порождения Process (поскольку ваш компилятор, вероятно, использует сложный набор параметров, ProcessBuilder, вероятно, является лучшим вариантом). Это позволит вам получать выходные данные процесса во время его выполнения (чтобы вы могли отслеживать выходные данные компилятора на наличие предупреждений или ошибок), а также его код возврата.

Вам могут пригодиться следующие примеры:

http://www.rgagnon.com/javadetails/java-0014.html

Чтобы получить код возврата работающего Process, просто используйте метод waitFor(). Это удобно, если вы не заботитесь о каком-либо из выходных данных и просто хотите получить возвращаемое значение.

1 голос
/ 13 апреля 2011

Вы можете использовать java.lang.ProcessBuilder для выполнения команд и проверки статуса. Здесь JAVADOC: http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ProcessBuilder.html

0 голосов
/ 13 апреля 2011

Если вы в основном делаете фрагменты кода, попробуйте запустить код Python с использованием Jython.Подробнее см. Howto многопоточные скрипты jython, работающие на Java? .

0 голосов
/ 13 апреля 2011

Возможно, вы захотите использовать Runtime.exec() для вызова соответствующего компилятора.Проверьте JavaDoc для получения дополнительной информации о том, как обращаться с выводом и т. Д.

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