Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему так работет новый поток? 
:(
    Опции темы
Gugle
Дата 14.12.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



Вот 2 класса:
NewJFrame
Код

public class NewJFrame extends javax.swing.JFrame {
    
    public NewJFrame() {
        initComponents();
    }
    
    private void initComponents() {

        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        getContentPane().add(jButton1, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, -1, -1));

        pack();
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        Runnable r = new ru.niir.utilPack.NewClass();
        Thread t = new Thread(r);
        t.start();
        for (int i=0; i<10000; i++) {
            System.out.println(t.getState());
        }
        System.out.println(t.isAlive()+ " " +t.getState()+ " " +t.isInterrupted());
    }
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
    
    private javax.swing.JButton jButton1;

}

NewClass
Код

public class NewClass implements Runnable {

    public void run() {
        javax.swing.JOptionPane.showMessageDialog(null, 
                    "   ПОЗДРАВЛЯЮ!!!", 
                    "Привет!", 
                    javax.swing.JOptionPane.OK_OPTION);
    }

}

При нажатии на кнопку запускается поток который тупо генерит сообщение, а тем временем должен выполняться цикл.
Не могу понять почему сообщение в новом потоке отображается только после завершения цикла?
Я же вроде отдельный поток создаю?
PM MAIL   Вверх
Kangaroo
Дата 14.12.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 15
Всего: 104



Цитата(Gugle @  14.12.2007,  10:35 Найти цитируемый пост)
Не могу понять почему сообщение в новом потоке отображается только после завершения цикла?
Я же вроде отдельный поток создаю?

Не претендую на правильность, но идею свою расскажу).  Я так подозреваю обработчик кнопки и рисование сообщение идут в одном потоке - event dispatcher thread. Поэтому они идут поочереди.
А вам нужно запускать в потоке как раз цикл, а не сообщение. Тогда должно быть ок.


--------------------
Lost....
PM MAIL MSN   Вверх
Gugle
Дата 14.12.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



Интересная мысль.
PM MAIL   Вверх
nornad
Дата 14.12.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 6
Всего: 31



Цитата(Gugle @  14.12.2007,  14:35 Найти цитируемый пост)
Не могу понять почему сообщение в новом потоке отображается только после завершения цикла?

Потому что интерфейсный поток только один, а в нём в данный момент выполняется цикл (цикл находится в обработчике нажатия на кнопку).

Добавлено через 1 минуту и 20 секунд
Точнее, как правильно сказал Kangaroo, поток зовётся event dispatcher thread. smile


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.