System.out.println не работает - PullRequest
4 голосов
/ 21 июля 2010

Каковы некоторые сценарии, в которых java-файл System.out.println не сможет произвести какой-либо вывод. У меня есть вызов внутри метода, и иногда, когда метод вызывается, я получаю println, а иногда нет.

Обновление: я также использую System.out.flush () после печати. ​​

Обновление: спасибо за помощь в отладке. Выяснилось, что блокирующий вызов для открытия диалогового окна сделал вывод совершенно неправильным. Я думал, что метод, для которого я пытался напечатать сообщения, вызывался, когда диалоговое окно закрывалось, но сам метод был тем, что вызывало диалоговое окно, и поэтому после закрытия он уже прошел распечатки, где я начал искать тест. Если у кого-то есть возможность удалить этот вопрос, поскольку проблема была не в том, что было задано изначально, это будет оценено.

Ответы [ 6 ]

4 голосов
/ 21 июля 2010

System.out.println на некоторых платформах использует буферизованный вывод.В зависимости от того, что делает ваш код, возможно, что буферы не очищаются до выхода из вашей программы.Попробуйте поставить System.out.flush() после ваших println с и посмотрите, поможет ли это.

Редактировать:

иногда при вызове метода я получаю printlnа иногда я не

Как вы проверяете, что метод вызывается, но println не производит вывод?Возможно ли, что ваш метод вызывает исключение (которое затем проглатывается) до того, как оно попадет в печать?

Конечно, было бы очень полезно увидеть какой-то реальный код.

4 голосов
/ 21 июля 2010

Я никогда не видел этот сценарий раньше.Теоретически, он «потерпит неудачу» только тогда, когда результат будет не там, где вы ожидаете.Выходная цель может быть изменена с помощью System#setOut().

2 голосов
/ 21 июля 2010

Где вы проверяете свои результаты? Возможно, что System.out был перенаправлен в другое место, поэтому, возможно, вы ищете не в том месте.

1 голос
/ 22 июля 2010

ответ по предложению @ BalusC -

Спасибо за помощь в отладке. Выяснилось, что блокирующий вызов для открытия диалогового окна сделал вывод совершенно неправильным. Я думал, что метод, для которого я пытался напечатать сообщения, вызывался, когда диалоговое окно закрывалось, но сам метод был тем, что вызывало диалоговое окно, и поэтому после закрытия ему уже передавались распечатки, с которых я начал искать тест. Если у кого-то есть возможность удалить этот вопрос, поскольку проблема была не в том, что было задано изначально, это будет оценено.

0 голосов
/ 21 июля 2010

Возможно, дескриптор файла был изменен.То есть дескриптор файла stdout больше не 1.Я видел это в утилитах журналирования, где люди не хотят идти и ловить любой текст, который может быть напечатан в дескрипторе файла, поэтому вместо этого они просто перенаправляют поток на дескриптор файла открытого файла.1004 * Вот пример на python:

import sys

h = open(r"C:\foo.txt","a+")

sys.stdout = h
sys.stdout.write("hey fellas")

h.close()

Запустите это на cmdline, и вы не получите распечатки "привет, ребята", как вы ожидаете.Вместо этого он будет перенаправлен в файл C: \ foo.txt

0 голосов
/ 21 июля 2010

System.out.println - буферизованный вывод, если вы не очищаете буфер, может показаться, что он «ждёт» до конца программы. Иногда программа может умереть до очистки своих буферов. System.out.flush () принудительно сбросит вывод.

...