2017-04-20 3 views
3

Dans mon application java, j'ai une fonction de sauvegarde du journal:fonction Java waitFor() process entraîne l'application de geler

rt = Runtime.getRuntime(); 
pr = rt.exec(command); 
int exitVal = pr.waitFor(); 

if(exitVal == 0) 
    return true 

Le problème est qu'il faut un certain temps pour sauvegarder les journaux et pour obtenir une réponse, jusqu'à ce que alors mon application se fige. Si je supprime l'appel de fonction pr.waitFor(), j'obtiens une réponse, mais la sauvegarde du journal ne fonctionne pas.

+0

Soit vous devez l'attendre, soit vous ne l'attendez pas. En fonction de votre contexte exact, vous pouvez utiliser une sorte de thread d'arrière-plan pour exécuter le processus et avoir une sorte d'observateur qui est averti lorsque le processus est terminé. 'SwingWorker' de l'API Swing fait cela (plus ou moins) – MadProgrammer

+0

Essayé selon cela et cela fonctionne. http://stackoverflow.com/questions/3489543/how-to-call-a-method-with-a-separate-thread-in-java/3489549 –

Répondre

1

Oui, vous devriez le faire dans un fil séparé. En savoir plus sur l'interface Runnable et la classe Thread

+0

Merci! threads utilisés pour résoudre le problème –

2

La méthode waitFor() provoque l'attente du thread en cours, si nécessaire, jusqu'à la fin du processus représenté par cet objet Process. Cette méthode retourne immédiatement si le sous-processus est déjà terminé. Si le sous-processus n'est pas encore terminé, le thread appelant sera bloqué jusqu'à la fermeture du sous-processus.

Vous pouvez donc créer un autre thread qui exécute la commande. pr = rt.exec (commande); . Vous devrez peut-être effectuer cette tâche de manière asynchrone. Parce que jusqu'à ce que subprocess se termine le processus attendra.

+0

Merci ça marche! –