Java - Capturar evento externo a programa.

 
Vista:

Capturar evento externo a programa.

Publicado por Kevin (2 intervenciones) el 14/02/2018 03:25:42
Buen dia compañeros. La cuestión es que necesito poder capturar un evento externo a un programa java; especificamente, saber desde mi programa, de alguna forma, cuando otro programa X (Por ejemplo Word, o cualquier otro programa instalado) es iniciado, o en su defecto, cerrado.
Si alguien sabe como posiblemente se podría lograr esto se lo agradeceria mucho. Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kingk
Val: 247
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Capturar evento externo a programa.

Publicado por kingk (108 intervenciones) el 15/02/2018 04:15:26
Hola tal vez el siguiente código te sirva:
1
2
3
4
5
6
7
8
private static boolean isProcessRunning(String processName) throws IOException, InterruptedException
{
        ProcessBuilder processBuilder = new ProcessBuilder("tasklist.exe");
        Process process = processBuilder.start();
        String tasksList = toString(process.getInputStream());
 
        return tasksList.contains(processName);
}

Donde el parametro processName debe ser el nombre del ejecutable.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Capturar evento externo a programa.

Publicado por Kevin (2 intervenciones) el 16/02/2018 02:42:39
Hola amigo muchas gracias por tu respuesta. Modifiqué el método ya que en la línea 5 me perdí un poco en como generar el String de la lista de tareas.
1
2
3
4
5
6
7
8
9
10
private  boolean isProcessRunning(String processName) throws IOException, InterruptedException
    {
        ProcessBuilder processBuilder = new ProcessBuilder("tasklist.exe");
        Process process = processBuilder.start();
        BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String task;
        while((task = input.readLine())!= null){
            if(task.contains(processName)) return(true);
        }return (false);
    }
El método funciona bien. La cuestión es que no se que tan eficiente sería dejar un ciclo corriendo indefinidamente como un demonio preguntando si X programa está activo. Eso es lo que necesito verificar: el estado del programa. Lo ideal sería poder generar eventos cuando se inicie o se cierre el programa X, para evitar el ciclo. Por el momento sigo buscando como hacerlo, pero ésta funcionaría como una solución alternativa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar