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

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

21.08.2014, 18:53. Показов 2308. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru