Como saber saída do método main?

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

retornar um valor? como assim?

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

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

[quote=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[/quote]

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

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

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.

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…

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.

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

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.