Executando Runtime.exec()

3 respostas
A

[b]Alguém pode me dizer porque isso nao funciona?
Ele nao gera um arquivo achou e mesmo sem esse direcionamento " >achou " ele nao compila meu programa.
Alguém pode me dizer como resolver isso, ou me passar uma rotina que execute um compilador?

grato, no aguardo.
[/b]

import java.io.*;
import java.lang.Runtime;



public class Compilor{
	
	public Compilor(){
	}
	
	public static void main(String[] args) throws IOException {
		        
		Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec("gcc /home/andrep/teste/calculadora.c > achou");
        int resComp = proc.exitValue();
        System.out.println("Resultado da compilacao: " + resComp);
    }
    	
}

3 Respostas

rodrigopmatias

Tente assim:

import java.io.*;
import java.lang.Runtime;



public class Compilor{
	
	public Compilor(){
	}
	
	public static void main(String[] args) throws IOException {
		        
		Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec("/usr/bin/gcc /home/andrep/teste/calculadora.c > achou".split("\s"));
        int resComp = proc.exitValue();
        System.out.println("Resultado da compilacao: " + resComp);
    }
    	
}

acho que assim funciona.

A

Mudei o código um pouquinho… porém inclui as suas alterações, mas mesmo assim ainda nao funciona! O engraçado é que os arquivos que tem erros propositais, esses sim o console (eclipse) do Java mostra os erros de compilação.
veja o novo código:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.Runtime;

public class Compilor{
	
	public Compilor(){
 	}
 
	public void Compila(String arqName) {
	
		Runtime r = Runtime.getRuntime();
		System.out.println("Compilando "+ arqName + " aguarde...");
		 int lExitValue = -1 ;
		
		try {
			Process proc = r.exec("/usr/bin/gcc /home/andrep/"+arqName);
			BufferedReader stdout = 
		           new BufferedReader(
		             new InputStreamReader(proc.getInputStream()));
		         BufferedReader stderr = 
		           new BufferedReader(
		             new InputStreamReader(proc.getErrorStream()));

		         do {
		            if (stdout.ready())
		              System.out.println(stdout.readLine());
		            if (stderr.ready())
		              System.out.println(stderr.readLine());
		            try {
		              lExitValue = proc.exitValue();
		            }
		            catch (IllegalThreadStateException ex) {
		              // Processo nao esta pronto.... aguarde
		            }
		         } while (lExitValue == -1);
		}
		catch(java.io.IOException e) {
			System.out.println(e);
		}
	}
}
xandroalmeida
Tente isto
import java.io.*;
import java.lang.Runtime;

public class Compilor{

	public Compilor(){
	}

	public static void main(String[] args) throws IOException {
		FileOutputStream os = new FileOutputStream("achou");
		Runtime rt = Runtime.getRuntime();
		Process proc = rt.exec("gcc /home/andrep/teste/calculadora.c");
		InputStream is = proc.getInputStream();

		int c = 0;
		while ((c = is.read()) != -1) {
			os.write(c);
		}
		
		is.close();
		os.close();

		int resComp = proc.exitValue();
		System.out.println("Resultado da compilacao: " + resComp);
	}
}
Criado 22 de novembro de 2006
Ultima resposta 22 de nov. de 2006
Respostas 3
Participantes 3