Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java GUI
Войти
Регистрация
Восстановить пароль
 
SadovnikJava
0 / 0 / 0
Регистрация: 22.03.2018
Сообщений: 10
1

Запутался с потоками

06.06.2018, 15:39. Просмотров 104. Ответов 0
Метки нет (Все метки)

Задача казалась очень простая и решаемая за 5 минут, но что то пошло не так)
В общем имеется окно Jframe в котором окошко для текста, много кнопок и т.п. При нажатии на кнопку выполняется метод и если информации много то он выполняется 10-15 секунд, т.е. визуально происходит как бы зависание. Вот и решил я, что бы было понятно, что прога "думает" в это время вывести окошко с гифкой.
вот так выглядит часть кода в слушателе окна:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private class ButtonListener implements ActionListener {
 
        @Override
        public void actionPerformed(ActionEvent event) {
 
            if (event.getSource() == buttonCoder){
                if (booleanSelectKey) {
                    openFrameWaiting();   //метод который запускает окошко с гифкой
                    encoding();               // метод, который выполняет расчеты
                    closeFrameWaiting();  // метод, который закрывает окошко с гифкой
                }
                else {
                    JOptionPane.showMessageDialog(null, "Для шифрования необходимо выбрать ключ!\nНажмите на кнопку ''Работа с ключами'' и выберите ключ.", "Внимание!", JOptionPane.WARNING_MESSAGE);
                }
            }
вот сами методы:
Java
1
2
3
4
5
6
7
8
9
 private void openFrameWaiting(){
        frameWaiting = new FrameWaiting(getX(),getY());
        frameWaiting.setVisible(true);
        System.out.println("open");
 
    }
    private void closeFrameWaiting(){
        frameWaiting.dispose();
    }
а вот само окошко с гифкой:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class FrameWaiting extends JDialog{
    public FrameWaiting(int locationX, int locationY){
        ImageIcon image = new ImageIcon("pic/waiting.gif");
        setUndecorated(true);
        setResizable(false);
        setLocation(locationX+100, locationY+100);
        JLabel label = new JLabel(image);
        Container container = getContentPane();
        container.add(label);
        pack();
        System.out.println("frameWaiting");
        setAlwaysOnTop(true);
    }
}
Но само окошко с гифкой не запустилось. Я закоментировал метод закрытия окошка с гифкой (этот => frameWaiting.dispose() и увидел, что оно (окно с гифкой) запускается, но после выполнения метода, хотя в консоле выводится сразу:
frameWaiting
open

т.е. класс FrameWaiting выполняется вовремя, но гифка показывается только когда весь метод в слушателе выполнится, это я предположил по кнопке, которая залипает до момента когда методы все прописанные в слушателе на конкретную кнопку не выполнятся.
В общем я уже голову сломал почему так происходит, и как это решить. Так же если в классе FrameWaiting выставить setModal(true); тогда окошко с гифкой появляется сразу как и задумывалось, но программа на этом зависает, я так догадываюсь, что она ждет закрытия этого окошка т.к. оно диалоговое. Но как бы модальность мне особо и не критична, можно ее и отключить.

Добавлено через 1 час 18 минут
Вопрос решил, когда вынес выполнение метода расчета, открытия и закрытия окна с гифкой в отдельный процесс. Но так я и не понял, почему все так коряво происходит если эти методы выполняются из класса слушателя?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2018, 15:39
Ответы с готовыми решениями:

Работа с потоками
Создать Swing – приложение с использованием потоков. Строка движется вертикально, отбивается от...

Гонки с потоками
Здравствуйте форумчане. Подскажите как реализировать гонки машинок с помощу потоков. Вот...

Запутался в пакетах. (Класс не нахолит самого себя)
Уважаемые коллеги! Проблема такая: Решил всё разместить по пакетам. Структура такая:...

Проблема при работе с потоками
Помогите решить тупую проблему! Есть массив строк: String MassStr = new String{'one', 'two',...

Закачка файла несколькими потоками.
Кто знает, как на Java посылать на сервер HTML-запрос на скачивание части файла? Большая просьба...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2018, 15:39

Запись данных в файл несколькими потоками.
Как на Java реализовать запись в файл несколькими потоками? К примеру, имеется файл размером 3Мб,...

Чуть-чуть запутался с размерами окна
Всем доброго дня, я чуть-чуть запутался с размерами окна, когда мы устанавливаем размер jframe...

Запутался с потоками
void __stdcall MyIFCallback(CONST SHORT *Buffer,UINT32 NumberOfSamples,WORD MaxADCAmplitude,UINT32...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru