Java ProcessBuilder: Résultante De Processus Se Bloque

J'ai essayé de l'utilisation de Java ProcessBuilder de lancer une application sous Linux qui doit s'exécuter à "long terme". La façon dont ce programme est de lancer une commande (dans ce cas, je suis en train de lancer un média application de lecture), de lui permettre d'exécuter et vérifier pour s'assurer qu'il n'a pas écrasé. Par exemple, vérifier pour voir si le PID est toujours actif, et ensuite relancer le processus, si il est mort.

Le problème, je vais passer maintenant, c'est que le PID reste vivant dans le système, mais l'interface graphique de l'application se bloque. J'ai essayé de déplacer le ProcessBuilder(cmd).démarrer() dans un thread séparé, mais qui ne semble pas être la résolution de n'importe quoi, comme j'ai espéré qu'il aurait.

Fondamentalement le résultat est que, pour l'utilisateur, le programme SEMBLE avoir écrasé, tuant le processus Java que les lecteurs de la ProcessBuilder.start() Processus permet en fait le Processus créé pour reprendre son comportement normal. Cela signifie que quelque chose dans l'application Java est interférant avec les Processus générés dynamiquement, mais je n'ai absolument aucune idée de ce que, à ce stade. (C'est pourquoi j'ai essayé de séparer dans un autre thread, ce qui ne semble pas résoudre quoi que ce soit)

Si quelqu'un a des entrée/pensées, s'il vous plaît laissez-moi savoir, que je ne peux pas pour la vie de me faire penser à la façon de résoudre ce problème.

Edit: je n'ai aucune inquiétude sur le flux d'e/S créé à partir du Processus, et ont donc pris aucune mesure de traiter avec que-ce que cela pourrait provoquer un blocage dans le Processus lui-même?

  • Puisque vous avez déjà dit que vous n'êtes pas affaire avec les flux du processus, je dois carillon pour dire que "Oui, il est fortement probable que c'est la cause du problème. Il est important de lire le contenu de stdout et stderr, et aussi écrire à stdin si l'enfant attend de vous". Il serait utile de votre temps pour vérifier ce DONC, la question: stackoverflow.com/questions/882772/...
InformationsquelleAutor Matt D | 2010-07-19