Курсы по программированию

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

 13417

-- Chip

J2. Печать / WRITE - Окно JFrame

  • На этом уроке мы напишем программу
    с графическим интерфейсом -
    окошко с сообщением.

    Попробуйте закомментировать каждую строчку по отдельности,
    перекомпилируйте и запустите - что изменилось?

    Напишите свои выводы в комментариях.
  • Дата отправки отчёта: 29 декабря 2018 г.
  • Задание выполнено: за 1 час. 4 мин.
  • Чему научился: Давненько компьютер не ловил кучу segmentation fault, как во время выполнения этого урока. А всё дело в том, что по заданию требовалось комментировать по очереди каждую строчку программы и это выдавало весьма причудливые результаты.
    На первом скриншоте программа без комментариев, на втором с закомментированным добавлением метки на форму.

    По заданию требовалось описать результаты экспериментов по комментированию каждой строчки, ниже результаты.

    1: #include <gtk/gtk.h>
    Ошибка компиляции. Ух, куча предупреждений, ошибки об обсутствующих функциях, макросах. Поди да и разберись в этом, а все лишь из-за того, что не включил заголовочный файл...

    2: пустая строка
    Компилируется, запускается, все работает. А чего вы хотели, если закомментировать пустую строку? :)

    3: int main(int argc, char *argv[])
    Ошибка компиляция. Компилятор намекает, что должно быть что-то перед открывающейся скобкой, которая идет ниже, на 4 строке.

    4: {
    Ошибка компиляции. Куча различных сообщений, причем разного характера, в основном касаются того, что я пытаюсь использовать выражения не в том месте, вне функции, так нет открывающейся скобки.

    5: GtkWidget *frame, *label;
    Ошибка компиляции, не были объявлены переменные frame, label.

    6: gtk_init(&argc, &argv)
    Программа компилируется, при запуске ловит Segmentation fault, так как не была выполнена инициализация GTK.

    7: frame = gtk_window_new(GTK_WINDOW_TOPLEVEL)
    Успешная компиляция, после запуска выдает предупреждения о неуспешной попытке работать с объектом frame. Окно программы не показывается, но программа работает. Для завершения Ctrl+C.

    8: gtk_window_set_title(GTK_WINDOW(frame), "Hello, Java!");
    Программа компилируется, запускается, работает. Ошибок нет. Узнал для себя новое - если не указать заголовок окна, то вместо него пишется имя исполняемого файла. Мелочь, а приятно узнать:)

    9: label = gtk_label_new("Welcome!");
    Компиляция успешна. А дальше Segmentation fault! Вот тут удивило. В отличие от 7, где программа тихо-мирно как-то пыталась работать без окна приложения.

    10: gtk_container_add(GTK_CONTAINER(frame), label);
    Программа компилируется, запускается, работает, ошибок нет. Все на месте, кроме метки :) Так как её не добавили на форму.

    11-12: g_signal_connect(G_OBJECT(frame), "destroy",
    G_CALLBACK(gtk_main_quit), NULL);
    Программа компилируется, запускается, работает, ошибок нет. Ну... почти нет ошибок, кроме одной логической. При попытке закрыть приложение, нажав на крестик, кликнув на пункт меню или даже Alt+F4, окно закрывается, но приложение работает!

    13: gtk_window_set_default_size(GTK_WINDOW(frame), 250, 100);
    Все почти окей - компилируется, запускается, метка на месте, успешно закрывается. Проблема в том, что в GTK используется динамическая компоновка виджетов и размер окна подгоняется под минимальный необходимый размер для отображения элементов. Поэтому окно очень маленькое - но метку Welcome видно полностью :)

    14: gtk_widget_show_all(frame);
    Компиляция успешна, далее запускаю и... ничего, просто окно терминала, ожидающего заверешения работы программы. Окна приложения нет, так как мы не сказали GTK что нужно показать на экране.

    15: gtk_main();
    Компилиция успешна, программа запускается и сразу завершается. При комментировании этой строчки мы не попадаем в цикл обработки сообщений.

    16: }
    Ошибка компиляции. Удивительно, он ожидает продолжения банкета! :) Ищет какое-нибудь объявление или выражение после 15 строчки.

    Надеюсь, не слишком много букв. Спасибо за эксперименты, сам бы вряд ли так дурачился со своей программой :)
  • Оценка видео-уроку:
Отчёт от 13417 за J2. Печать / WRITE - Окно JFrame


Отчёт от 13417 за J2. Печать / WRITE - Окно JFrame




Оцени работу

 
Сохранить страницу:

1. --
Евгений Волосатов
Евгений Волосатов
ответить
→  Chip  # J2. Печать / WRITE - Окно JFrame / 2018-12-29 13:53

Да, думаю, ты немного перестарался, комментируя фигурные скобки и пустые строчки )
Но результаты прекрасные.


7119. --
Новопашин Владимир
Новопашин Владимир
ответить
→  Chip  # J2. Печать / WRITE - Окно JFrame / 2018-12-29 19:53

Ну может тебе сделать такой же курс под C++. Ну там объяснишь все нюансы. Тоже прикольно будет.


  • Отчёт оценивали:
    8275Tekashnik+1   3922Александр+1   1Евгений Волосатов+1   17947Dmitry Sinitsin+1   Посетитель+1   7119Новопашин Владимир+1   791Валерий Жданов+1   6644valerys Nikola+1   17606Виктор+1   10895Danil42Russia+1  

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


posle zakomentirovanija otdelnih strok mozhno ubrat' tekstovie soobsehnija, razmer okoshka, libo otkliuchit funkciju samovikliuchenija


Научился: Я научился на этом уроке писать программу с графическим интерфейсом - окошко с сообщением.
Все супер !