Como saber saída do método main?

10 respostas
marcioa1

Olá,

Quero que meu programa java retorne um valor para o Sistema Operacional.
Como fazer isto ?
System.exit(codigoDesejado) ?
Alguém pode me dar um exemplo da chamada a um programa ( class ou jar ) que retorne um valor ?

Obrigado,

Marcio

10 Respostas

vanzella

retornar um valor? como assim?

saoj

Acho que System.exit(0) e System.exit(1) fazem isso…

marcioa1

Explicando melhor

Quero usar um scheduler que chame um jar. Se retornar um determinado código, o processo chegou até o final sem erros, senão, deve disparar outro evento.

O System.exit(0) ou (1) tem retorno void na assinatura . Como capturar o valor entre parêntesis do método exit ?

Uma possibilidade seria gravar um arquivo ( txt ) indicando sucesso e outro nome de arquivo txt para indicar falha.

O que vocês acham ?

Obrigado,

Marcio

vanzella

marcioa1:
Explicando melhor

Quero usar um scheduler que chame um jar. Se retornar um determinado código, o processo chegou até o final sem erros, senão, deve disparar outro evento.

O System.exit(0) ou (1) tem retorno void na assinatura . Como capturar o valor entre parêntesis do método exit ?

Uma possibilidade seria gravar um arquivo ( txt ) indicando sucesso e outro nome de arquivo txt para indicar falha.

O que vocês acham ?

Obrigado,

Marcio

Iria sujerir isso mesmo, não sei se existe uma forma melhor. E ai galera?

fabiofalci

Tu vai chamar a partir de outro programa java?
Entao faz algo assim

package runtime;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;

public class Execute {

	public static void main(String[] args) {
		try {
			Process p = Runtime.getRuntime().exec(
					"java -cp ./bin runtime.JustExit 99");
			
			LineNumberReader input = new LineNumberReader(
					new InputStreamReader(p.getInputStream()));

			String line;
			while ((line = input.readLine()) != null) {
				System.out.println(line);
			}
			System.out.println("Exit value " + p.exitValue());

		} catch (IOException e) {

			e.printStackTrace();
		}
	}
}

Que vai chamar essa classe em java:

package runtime;

public class JustExit {

	public static void main(String[] args) {
		System.out.println("teste");
		System.exit(Integer.parseInt(args[0]));
	}
}

Além de pegar o exit value ele tb imprimi o inputStream do processo

Andre_Brito

Em C, se você colocar system(codigoaqui) ele funciona.
Numa dessa, tente fazer um arquivo em C e pegar o executável dele e executar :slight_smile: è gambi, mas acho que funciona.

nbluis

O parametro do exit serve para isso mesmo.
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#exit(int)
Mas se você quer uma outra alternativa.
Faz uma escrita qualquer com System.out.println…

ramilani12

Vc poderia utilizar recursos de AOP para capturar esse argumento System.exit(int arg0)
Um pequeno exemplo com AspectJ

//Class
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("Aloha");
		System.exit(1);

	}

}
//Aspect
public aspect AspectMain {
	
	pointcut getExit(int arg0): call (void System.exit(int)) && args(arg0) ;
	
	
	before(int arg0): getExit(arg0)
	{
		System.out.println(arg0);
	}

}

Esse pointcut ira captuar o argumento System.exit() antes da chamada do metodo.

marcioa1

Acho que meu problema não ficou claro.

Um JobScheduler da vida vai chamar um jar. Quero que este jar retorne um valor para o sistema operacional, para que o jobScheduler o recupere e faça alguma coisa com ele. System.out.println(codigo do exit) não resolve.

Obrigado,

Marcio

Marky.Vasconcelos

Esse JobScheduler vai chamar o jar como?
Runtime.exec ?

Se for isso use o System.out.println em alguma mensagem no programa que você quer ver e olhe o resultado no Proccess gerado pelo exec.

Criado 25 de janeiro de 2008
Ultima resposta 28 de jan. de 2008
Respostas 10
Participantes 8