2017-01-26 11 views
1

Во-первых, извините за мой плохой английский. Я написал свою проблему на форумах, которые говорят на моем языке. Но я не получил ответа. Я надеюсь, что вы можете мне помочь.System.out.println() не работает, поскольку я хочу в цикле for

Когда я пишу цикл for, команда System.out.println() или JTextArea.setText() начинает работать, когда цикл завершен. Часть моих кодов:

for(int pixelCount = 0;pixelCount<pixelLength;pixelCount++){ 

    System.out.println("Progress..:"+pixelCount+"/"+pixelLength); 



    int x = pixelCount%Image.getWidth(); 
    int y = pixelCount/Image.getWidth(); 
    if(isChange==1){ 
    if(new Color(Image.getRGB(x, y)).getRed()%2==0){ 
     Image.setRGB(x, y,new Color(new Color(Image.getRGB(x, y)).getRed()+1, 
            new Color(Image.getRGB(x, y)).getGreen(), 
            new Color(Image.getRGB(x, y)).getBlue(), 
            new Color(Image.getRGB(x, y)).getAlpha()).getRGB());} 
} 

Петля иногда очень длинная. Поэтому я печатаю его на экране, чтобы увидеть ход цикла. Цикл начинается, когда я нажимаю кнопку. Но когда я нажимаю кнопку, команда System.out.println() выглядит потом.

EDIT: Как мне написать прогресс в цикле?

EDIT: Я решил проблему, друзья. Команда System.out.println() работает нормально. Перед запуском цикла for выполняется команда replace. Программа проводит время там до начала цикла for. Спасибо всем, кто нашел время и помог мне

+2

Возможный дубликат [Синхронизация и System.out.println] (http://stackoverflow.com/questions/9459657/synchronization-and-system-out-println) – Guy

+0

@Guy отсутствует синхронизация или многопоточность, но в OP, так что ваш дубликат здесь не имеет значения. –

+0

@ErwinBolwidt, вероятно, более точные дубликаты, но идея состоит в том, что 'System.out.println' не синхронизирован, поэтому вывод появляется только после завершения цикла. – Guy

ответ

1

Любой звонок System.out.flush() после того, как вы распечатаете или используете System.err.println.

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

+0

Спасибо за ваш комментарий. Я попробовал оба. Но он все еще не работает. Только команда System.err.println() была красной. – Salihcan

1

Использование System.our.flush() уже упоминалось Эрвином Болвидтом. Способ работы вывода сильно зависит от типа используемой операционной системы (и терминала). Например, для систем * nix вы можете рассмотреть некоторую библиотеку, похожую на Curses (она первоначально является библиотекой C, но я уверен, что есть некоторые реализации Java).