Système..println ne fonctionne pas
Quels sont les scénarios dans lesquels la java du Système..println échoue à produire une sortie. J'ai un appel à l'intérieur d'une méthode et parfois, lorsque la méthode est appelée-je obtenir la println et othertimes je n'ai pas.
Mise à jour: je suis également en utilisant le Système..flush() après la println.
Mise à jour: Merci pour le débogage de l'aide. Il s'est avéré un appel bloquant pour ouvrir une boîte de dialogue faite de sortie apparaissent largement de l'ordre approprié. Je pensais que la méthode que j'essayais d'imprimer des messages pour que a été appelé lorsque la boîte de dialogue fermée, mais la méthode elle-même est ce qui est de l'appel de la boîte de dialogue et donc, après la fermeture, il était déjà passé les impressions qui était là où j'ai commencé à regarder pour le test. Si quelqu'un a la possibilité de supprimer cette question car la question n'était pas ce qui était initialement demandé ce serait apprécié.
Êtes-vous sûr que la méthode est appelée?
En omettant d'écrire la sortie, voulez-vous dire que l'appel est de ne pas écrire dans la console? Dans ce cas, vérifiez si le " out " flux a été redirigé.
Il suffit de mettre un println avant de vous assurer qu'il est en cours de cal...ah, attendez...
Vous souhaiterez peut-être fournir un peu plus de contexte de votre question. E. g. plus de détails sur l'environnement et le code utilisé et si vous avez été en mesure de reproduire ce dans différents environnement et/ou avec un simple "hello world" du code.
OriginalL'auteur lathomas64 | 2010-07-21
Vous devez vous connecter pour publier un commentaire.
System.out.println
sur certaines plateformes utilise le tampon de sortie. Selon ce que votre code est fait, il est possible que les tampons ne sont pas vidées avant que votre programme se termine. Essayez de mettreSystem.out.flush()
après votreprintln
s et voir si cela aide.Edit:
Comment êtes-vous de vérifier que la méthode est appelée, mais les println ne produit aucune sortie? Est-il possible que votre méthode lance une Exception (qui est avalé) avant qu'il arrive à la println?
Il serait, bien sûr, être très utile pour certains voir le code réel.
Sont ceux d'autres méthodes invoquée par cette méthode? Existe-il plusieurs threads? Fil de discussion.dumpStack imprime au Système.err, pas de Système.hors, sauf si vous êtes rinçage du Système.tre les vidages de pile peut ne pas être dans l'ordre que vous attendez.
OriginalL'auteur Jason Day
Je n'ai jamais vu ce scénario avant. En théorie, il ne serait que "l'échec" lorsque la sortie n'est pas là où vous vous attendez à ce qu'il est. La cible de sortie peut notamment être modifié à l'aide de
System#énoncées()
.On peut se contenter du Système d'impression.err.println(System.); pour voir si la sortie standard (stdout) est modifié depuis le début de l'application. (Si stderr lui-même est modifié, ce qui doit être imprimé ailleurs bien sûr).
OriginalL'auteur BalusC
Où êtes-vous la vérification de votre sortie? Il est possible que
System.out
a été redirigés ailleurs, peut-être que vous cherchez au mauvais endroit.OriginalL'auteur casablanca
réponse par @BalusC la suggestion--
Merci pour le débogage de l'aide. Il s'est avéré un appel bloquant pour ouvrir une boîte de dialogue faite de sortie apparaissent largement de l'ordre approprié. Je pensais que la méthode que j'essayais d'imprimer des messages pour que a été appelé lorsque la boîte de dialogue fermée, mais la méthode elle-même est ce qui est de l'appel de la boîte de dialogue et donc, après la fermeture, il était déjà passé les impressions qui ont été où j'ai commencé à regarder pour le test. Si quelqu'un a la possibilité de supprimer cette question car la question n'était pas ce qui était initialement demandé ce serait apprécié.
OriginalL'auteur lathomas64
Système..println est mis en mémoire tampon de sortie, si vous n'avez pas vider la mémoire tampon, il peut sembler à attendre jusqu'à la fin du programme. Parfois, le programme peut mourir avant de rincer ses tampons. Système..flush() force la sortie à être vidées.
OriginalL'auteur Elf King
Il est possible que le descripteur de fichier a été changé. I. e.,
stdout
's descripteur de fichier n'est plus1
. J'ai vu cette façon de faire dans la journalisation des services publics lorsque les gens ne veulent pas passer et attraper tout texte qui peut être imprimé à un descripteur de fichier, alors, ils suffit de rediriger le flux vers un descripteur de fichier d'un fichier ouvert.Voici un exemple en python:
Exécuter ce à la cmdline, et vous ne serez pas obtenir "hey les gars" imprimé comme vous vous attendez. Au lieu de cela, il sera redirigé vers le fichier C:\foo.txt
OriginalL'auteur Chris