Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188

Перенаправление вывода логов в окно

21.08.2014, 18:53. Показов 2335. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Разбираю пример из книги Хосртмана, там он приводит вариант вывода логов в созданное окно. Как я понимаю, сообщения должны выводиться в это окно по мере выполнения программы, однако этого не наблюдается, не могу понять в чем причина, уже в каждую строчку всмотрелся, но разобраться не получается... код немного длинноват, выкладываю весь, чтобы лишний раз по частям не кидать, если появятся вопросы. Заранее буду благодарен за помощь!

Сам класс для отображения логов!!!!!!!!!!!!!!!!!!!!!

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class WindowHandler extends StreamHandler
{
    public WindowHandler()
    {
        frame = new JFrame();
        final JTextArea output = new JTextArea();
        output.setEditable(false);
        frame.setSize(200, 200);
        frame.add(new JScrollPane(output));
        frame.setFocusableWindowState(false);
        frame.setVisible(true);
        setOutputStream(new OutputStream()
        {
            public void write(int b)
            {
            } // not called
 
            public void write(byte[] b, int off, int len) {
                output.append(new String(b, off, len));
            }
        });
    }
 
    public void publish(LogRecord record)
    {
        super.publish(record);
        flush();
    }
 
    private JFrame frame;
}
Класс драйв с главным методом

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class LoggingImageViewer
{
    public static void main(String[] args)
    {
        if (System.getProperty("java.util.logging.config.class") == null
                && System.getProperty("java.util.logging.config.file") == null)
        {
            try
            {
                Logger.getLogger("com.horstmann.corejava").setLevel(Level.ALL);
                final int LOG_ROTATION_COUNT = 10;
                Handler handler = new FileHandler("%h/LoggingImageViewer.log", 0, LOG_ROTATION_COUNT);
                Logger.getLogger("com.horstmann.corejava").addHandler(handler);
            }
            catch (IOException e)
            {
                Logger.getLogger("com.horstmann.corejava").log(Level.SEVERE,
                        "Can't create log file handler", e);
            }
        }
 
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                Handler windowHandler = new WindowHandler();
                windowHandler.setLevel(Level.ALL);
                Logger.getLogger("com.horstmann.corejava").addHandler(windowHandler);
 
                JFrame frame = new ImageViewerFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
                Logger.getLogger("com.horstmann.corejava").fine("Showing frame");
                frame.setVisible(true);
            }
        });
    }
}
Класс пользовательского окна с выводом изображения в метку и соответствующими логами в начале и конце методов

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
class ImageViewerFrame extends JFrame
{
    public ImageViewerFrame()
    {
        logger.entering("ImageViewerFrame", "<init>");
        setTitle("LoggingImageViewer");
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
 
        // set up menu bar
        JMenuBar menuBar = new JMenuBar();
        setJMenuBar(menuBar);
 
        JMenu menu = new JMenu("File");
        menuBar.add(menu);
 
        JMenuItem openItem = new JMenuItem("Open");
        menu.add(openItem);
        openItem.addActionListener(new FileOpenListener());
 
        JMenuItem exitItem = new JMenuItem("Exit");
        menu.add(exitItem);
        exitItem.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                logger.fine("Exiting.");
                System.exit(0);
            }
        });
 
        // use a label to display the images
        label = new JLabel();
        add(label);
        logger.exiting("ImageViewerFrame", "<init>");
    }
 
    private class FileOpenListener implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
            logger.entering("ImageViewerFrame.FileOpenListener", "actionPerformed", event);
 
            // set up file chooser
            JFileChooser chooser = new JFileChooser();
            chooser.setCurrentDirectory(new File("."));
 
            // accept all files ending with .gif
            chooser.setFileFilter(new javax.swing.filechooser.FileFilter()
            {
                public boolean accept(File f)
                {
                    return f.getName().toLowerCase().endsWith(".jpg") || f.isDirectory();
                }
 
                public String getDescription()
                {
                    return "JPEG Images";
                }
            });
 
            // show file chooser dialog
            int r = chooser.showOpenDialog(ImageViewerFrame.this);
 
            // if image file accepted, set it as icon of the label
            if (r == JFileChooser.APPROVE_OPTION)
            {
                String name = chooser.getSelectedFile().getPath();
                logger.log(Level.FINE, "Reading file {0}", name);
                label.setIcon(new ImageIcon(name));
            }
            else logger.fine("File open dialog canceled.");
            logger.exiting("ImageViewerFrame.FileOpenListener", "actionPerformed");
        }
    }
 
    private JLabel label;
    private static Logger logger = Logger.getLogger("com.horstmann.corejava");
    private static final int DEFAULT_WIDTH = 300;
    private static final int DEFAULT_HEIGHT = 400;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.08.2014, 18:53
Ответы с готовыми решениями:

Перенаправление вывода в другое окно
У меня есть прога, выводящая в одно из созданных ею окон текст. Как можно перехватить этот вывод и направить его в созданное мной окно...

Компонент для вывода логов
Приветствую всех. Хотелось бы выводить логи того, что делается в программе. Начал перебирать компоненты, но ни один не устроил...

Класс для вывода логов
Добрый день. Недавно задался вопросом, как выводить логи. При чём в классе происходит вся работа с открытием файлов, выводом времени и...

2
 Аватар для Robesper3411
20 / 19 / 3
Регистрация: 20.02.2012
Сообщений: 535
Записей в блоге: 1
29.08.2014, 17:15
особо не вчитывался, но не лучше ли использовать вместо фрейма
Java
1
JOptionPane.showMessageDialog(null, "Бла-бла-бла!!!");
0
51 / 51 / 42
Регистрация: 06.09.2013
Сообщений: 188
29.08.2014, 18:50  [ТС]
Robesper3411, нет, я уже разобрался в чем была проблема
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.08.2014, 18:50
Помогаю со студенческими работами здесь

Вывод логов с помощью logging в отдельное окно
Всем привет. Нужно реализовать логер в программе на PyQt5. У меня одна идея - записывать все логи при помощи logging в файл, а затем...

Перенаправление вывода
Здравствуйте, уважаемые форумчане. Проблема в следующем: беру процесс чрез ProcessBuilder, хочу перенаправить вывод чрез redirectOutput,...

Перенаправление консольного вывода
Думал - просто. Ан нет. Есть программа - консольный экзешник. Соответственно, вывод тоже консольный. Один параметр-файл. Не проблема...

Перенаправление ввода-вывода
Сабж собсно. Как? Нужно, чтобы поток ошибок направлялся в файл, а не светился юзерам на сайте. Типичная проблема: 'failed to connect'...

Перенаправление вывода процеса
Всем привет! Я запускаю процес: Process.Start(Options.CompilerPath, Options.CompilerArgs); Это консольная программа какая всю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru