Pessoal,
Eu tenho um programinha bem simples que invoca um batch file atraves de uma
chamada a Runtime.exec() (vide codigo fonte no final do e-mail). O arquivo
"MyBatchFile.bat", que eh invocado por este programinha, eh mais ou menos
assim:
@echo off
cls
set CLASSPATH=%1
set JAVA_HOME=%2
start %JAVA_HOME%\bin\javaw -ms64m -mx128m my.package.my.Class
Ou seja, "seta" CLASSPATH, JAVA_HOME e invoca outro programa que sera
inicializado em um processo a parte. O que eu quero eh que somente o
processo inicializado pelo arquivo batch continue rodando e que a VM que o
chamou possa chamar System.exit(0).
Com Windows NT o programa que eu fiz funciona perfeitamente (vide metodo
main mais a frente), ele invoca o batch file, e espera que o processo criado
retorne o primeiro String. Assim que isso acontece a VM "pai" pode terminar.
Com Windows 2000 o programa nao funciona, por alguma razao "nao da tempo" de
a VM inicializada pelo batch file inicializar my.package.my.Class
Nao sei ao certo se eu deveria estar somente "esperando o primeiro String" e
saindo imediatamente, ou seja, se eu posso entender isso como sinal de que o
processo "pai" pode sair, ou se eu estou fazendo alguma outra coisa errada.
A proposito, o batch file funciona em ambos os sistemas operacionais, ou
seja, o problema eh realmente o programa.
Alguem teria alguma dica para me dar? Obrigado!
Ai' vai o codigo fonte (eh bem pequeno)...
public static void main(String[] args) {
StringBuffer cmd = new StringBuffer("MyBatchFile.bat ");
try {
Properties props = System.getProperties();
// CLASSPATH
String classpath = props.getProperty("java.class.path");
cmd.append("\"");
cmd.append(classpath);
cmd.append("\" ");
// JAVA_HOME
String javaHome = props.getProperty("java.home");
cmd.append(javaHome);
// GET RUNTIME AND CREATE NEW PROCESS
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(cmd.toString());
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
// make sure that the application was already started and quit
String line = br.readLine();
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
---------------------------------
Andre Mendonca, Software Engineer
[EMAIL PROTECTED]
http://www.sknt.com
Sakonnet Technology, LLC
594 Broadway, Suite 1008
New York, NY 10012
Tel (212) 343-3170 x109
Fax (212) 343-3103
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------