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
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 è 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.