Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 26.06.2015
Сообщений: 3
1

Приостановить главный поток до закрытия формы

26.06.2015, 13:57. Показов 2307. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем не могу понять, как сделать так, чтоб поток main тормозился, пока не закроется форма

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
public class Client extends JFrame  {
    public Client(String[] args) {
        ClientListener clst = new ClientListener(this);               
        setSize(700,600);
        setLocation(300,100);
        setLayout (null);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        Container cp = getContentPane();      
 
        JButton add = new JButton ("Add");  
        add.addActionListener(clst);        
        add.setBounds(550, 140, 120, 30);
        add.setActionCommand("add");
        cp.add(add);
        
        setVisible(true);//здесь создается нить EventDispatchThread? 
    }
    static public void main(String[] args) {        
         Client client = new Client(args);        
        if (client.connect(args) == 1) {            
            client.run();
            //Вот тут я хочу остановить нить main, пока не будет закрыта форма
            client.disconnect();
        }
    }
Java
1
2
3
4
5
6
7
8
9
10
11
12
 public class ClientListener extends WindowAdapter
        implements ActionListener, KeyListener, TextListener {
 
    private Client client;
 
    public ClientListener(Client client) {
        this.client = client;
    }   
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("Вот этот поток я хочу поймать, но его поймать вроде нельзя? " + Thread.currentThread().getName());
}}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2015, 13:57
Ответы с готовыми решениями:

После закрытия формы, ее поток продолжает работать
После закрытия приложения через процесс или крестик, поток помещается в фоновые процессы и...

Как приостановить поток?
var I: Integer; begin Thread := sSpinEdit2.Value; for I := 0 to Thread do begin ...

QThread, приостановить поток
В PyQt приложении вызывается один поток, который не имеет цикла, а просто выполняет некую функцию,...

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

4
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
26.06.2015, 13:59 2
а почему не сделать вместо setDefaultCloseOperation(DISPOSE_ON_CLOSE);
Java
1
setDefaultCloseOperation(EXIT_ON_CLOSE);
и не слипать главный поток? (что само по себе неправильно)
0
0 / 0 / 0
Регистрация: 26.06.2015
Сообщений: 3
26.06.2015, 16:08  [ТС] 3
не понял. переобъясните.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
26.06.2015, 16:37 4
зачем тормозить главный поток?
0
0 / 0 / 0
Регистрация: 26.06.2015
Сообщений: 3
26.06.2015, 16:56  [ТС] 5
В данном случае производятся какие-то операции например по установке соединения с сервером(connect()), отрабатывает форма, происходят определенные проверки и разрывается соединение(disconnect()). Если я правильно понимаю, то где-то здесь в setVisible(true) создается отдельный поток EventDispatchThread, который слушает все события от формы и работает параллельно потоку main и завершится только тогда, когда будет закрыта форма. Если я не приостановлю поток main между вызовом connect() и disconnect(), то у меня происходит подключение и отключение еще до того момента, как пользователь произведет первую операцию с формой. Что я хотел сделать: получить поток EventDispatchThread и остановить поток main, пока не будет завершен поток связанный с формой.
0
26.06.2015, 16:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2015, 16:56
Помогаю со студенческими работами здесь

Как приостановить и перезапустить поток
Есть следующее задание: Написать приложение, содержащее не менее двух тредов. Каждый из этих...

Поток не выполняется, его нельзя приостановить
uses GraphABC, ABCButtons; var n1: string; procedure scene1; begin Readln(n1); end; begin ...

Ошибка: Поток не выполняется, его нельзя приостановить
Плохо разбираюсь в Паскале,так что сильно не бейте.В программе выдает ошибку Поток не...

Главный поток и вторичный
1. При нажатии на кнопку Start в новом потоке запускается server.AcceptTcpClient() (который...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru