Pessoal,
Tenho uma classe (logo abaixo). Que executa programas externos ao java, eu a chamo da seguinte forma (em outra classe):
Executa execu = new Executa();
int exe = execu.executa("c:/windows/notepad.exe", "Felipe", "123");
execu.executa("C:/WINDOWS/system32/calc.exe", "Felipe", "123");
Bom, a chamda é executada na boa…ou seja, os programas são abertos e é salvo no banco qual programa foi executado.
Qual o meu problema ???
Preciso saber qt tempo esse programa ficou aberto pelo usuário. Tipo o cara pode chamar a calculadora e o notepad. Preciso saber qt tempo cada um deles ficou aberto. O que está ocorrendo é que está sendo salvo no banco sempre um tempo fixo para o primeiro a ser chamado, exemplo:
descricao tempo
c:/windows/notepad.exe 16
C:/WINDOWS/system32/calc.exe 0
package com.tcc;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.SQLException;
public class Executa {
public Executa () throws IOException, InterruptedException {
super();
}
public int executa(final String caminhoPrograma, String usuario, String senha) throws IOException, InterruptedException, InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
final Process p = Runtime.getRuntime().exec(caminhoPrograma);
final Monitora monit = new Monitora(usuario, senha);
monit.setDescricao(caminhoPrograma);
// ARMAZENA O INICIO DA EXECUCAO DO PROGRAMA
long inicioTempoMs = System.currentTimeMillis();
new Thread(){
public void run(){
try{
BufferedReader in = new BufferedReader(new InputStreamReader (p.getInputStream()));
String str = null;
while ( (str = in.readLine()) != null )
System.out.println(str);
monit.setSaida(str);
in.close();
}catch (IOException e){
e.printStackTrace();
}
}
}.start();
new Thread(){
public void run(){
try{
BufferedReader in = new BufferedReader(new InputStreamReader (p.getErrorStream()));
String str = null;
while ( (str = in.readLine()) != null )
System.out.println(str);
monit.setErro(str);
in.close();
}catch (IOException e){
e.printStackTrace();
}
}
}.start();
// GRAVA O TEMPO EM QUE O PROGRAMA FICOU EM EXECUCAO
Long terminoTempoMs = new Long(System.currentTimeMillis() - inicioTempoMs);
monit.setTempo(terminoTempoMs.toString());
monit.gravar();
return 0;
}
}
alguem poderia dar uma dica ?
Obrigado ! estou trabalhando em um trabalho de conclusao e como nao tenho experiencia em java estou levando surra de coisas simples.
