Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как перехватить вывод на консоль 
V
    Опции темы
AndreyKS
Дата 4.2.2011, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.5.2007

Репутация: нет
Всего: нет



Есть классы, которые результат (протокол работы) пропечатывают в консоль. Создал jFrame, кинул кнопку, по щелчку - создаётся класс и вызывается нужный метод. Как легко, не изменяя классы, показать на форме протокол работы в textarea например?

Добавлено через 12 минут и 2 секунды
плохо искал. Тут подобное рассматривалось http://forum.vingrad.ru/topic-131650.html 

Код


File f = new File("logFile.out");
        try {
            PrintStream printStream = new PrintStream(new BufferedOutputStream(new FileOutputStream(f)), true);
            System.setOut(printStream);
            System.setErr(printStream);
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }



Но как не в файл, а в элемент формы?
PM MAIL   Вверх
COVD
Дата 4.2.2011, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



PM MAIL   Вверх
AndreyKS
Дата 4.2.2011, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.5.2007

Репутация: нет
Всего: нет



спасибо!!
проблема решена

PM MAIL   Вверх
voooova
Дата 6.2.2011, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 6.2.2011

Репутация: нет
Всего: нет



Программа выполняется 3-4 минуты и в процессе решения выводить что-то в консоль. Когда переделал этим способом, весь вывод стал выполняться в конце, т.е. 3-4 минуты программа как бы висит, а потом выводит весь реультат. А как переделать, чтоб выводила по ходу выполнения?
PM MAIL   Вверх
COVD
Дата 7.2.2011, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Код

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;

public class RedirectErr {

    private static Output buffer = new Output();

    public static void main(String[] args) {
        long flushPeriod = 1000;
        startRedirect(flushPeriod);
        startDemo();
    }

    private static void startDemo() {
        while (true) {
            System.err.println("demo: " + new java.util.Date(System.currentTimeMillis()));
            try {
                Thread.currentThread().sleep(100);
            }
            catch (Exception e) {
                break;
            }
        }
    }

    public static void startRedirect(final long flushPeriodMSec) {
        System.setErr(new PrintStream(buffer));

        new Thread("FlushThread") {

            public void run() {
                while (true) {
                    try {
                        sleep(flushPeriodMSec);
                        flush();
                    }
                    catch (Exception e) {
                        break;
                    }
                }
            }
        }.start();
    }

    private static void flush() {
        List<String> list = buffer.getOutput();
        if (list != null) {
            System.out.println("begin flush: " + (new java.util.Date(System.currentTimeMillis())));
            for (String str : list) {
                System.out.println("  flushed:" + str);
            }
        }
    }

    private static class Output extends ByteArrayOutputStream {

        private List<String> output = new ArrayList();
        private StringBuilder buffer = new StringBuilder();
        private String lineSeparator = System.getProperty("line.separator");

        @Override
        public synchronized void write(byte[] b, int off, int len) {
            byte[] bytes = new byte[len];
            System.arraycopy(b, off, bytes, 0, len);
            String message = new String(bytes);

            if (message.equals(lineSeparator)) {
                StringBuilder buf = buffer;
                buffer = new StringBuilder();
                output.add(buf.toString());
            }
            else {
                buffer.append(message);
            }
        }

        /**
         * Method returns collected string messages or null if buffer is empty.
         * @return
         */
        public synchronized List<String> getOutput() {
            if (output.isEmpty()) {
                return null;
            }
            else {
                List<String> out = output;
                output = new ArrayList();
                return out;
            }
        }
    }
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0755 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.