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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jDialog при обработке, При обработке параметров вызвать jDialog 
V
    Опции темы
Hashashin
Дата 24.7.2008, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть функция, которая производит вычисления, если указать большие параметры, то комп долго обрабатывает. Так вот, чтобы пользователь не думал, что приложение висит, вставил jDialog, а по завершению этого процесса, jDialog вырубается. Но вставил "внаглую". Получилось, что всплывает одна рамка диалога, видимо все остальное подгрузиться не успевает
Код

    private void CalcMC(java.awt.event.ActionEvent evt) {
        jDialog1.setVisible(true); //ВОТ здесь вставил

        Random r = new Random(); //инициализируем генератор СВ
        
        double[] max = new double[3];//снимаем введеные максимальные величины
        try {
        max[0] = Double.valueOf(jTextField1.getText());
        max[1] = Double.valueOf(jTextField2.getText());
        max[2] = Double.valueOf(jTextField3.getText());
        } catch(NumberFormatException ex) {
            max[0] = 100000;
            max[1] = 100000;
            max[2] = 100000;
        }
        int cycles=0;
        if(jRadioButton1.isSelected())
            cycles = 100;
        else if(jRadioButton2.isSelected())
            cycles = 1000;
        else if(jRadioButton3.isSelected())
            cycles = 100000;
        else if(jRadioButton4.isSelected())
            cycles = 1000000;
        else if(jRadioButton5.isSelected())
            cycles = 10000000;
        
        int a = 0;//количество превышений продукций по трем показателям
        int b = 0;
        int c = 0;
        int e = 0;
        ///Монте Карло
        for(int x = 0; x<cycles; x++) {
            //первый показатель
            double d = r.nextGaussian()*D[0] + Mx[0]; 
            if(d<0) d = 0;
            if(d>max[0]) a++;
            
            //второй показатель
            d = r.nextGaussian()*D[1] + Mx[1];
            if(d<0) d = 0;
            if(d>max[1]) b++;
            
            //третий показатель
            d = r.nextGaussian()*D[2] + Mx[2]; 
            if(d<0) d = 0;
            if(d>max[2]) c++;
            
            //второй показатель
            d = r.nextGaussian()*D[3] + Mx[3];
            if(d<0) d = 0;
            if(d>max[1]) e++;
        } 
        //Анализ
        double res1 = (double)a / (double)cycles;
        double res2 = (double)b / (double)cycles;
        double res3 = (double)c / (double)cycles;
        double res4 = (double)e / (double)cycles;
        //Вывод результатов
        jLabel1.setText(new DecimalFormat("0.00%").format(res1));
        jLabel2.setText(new DecimalFormat("0.00%").format(res2));
        jLabel3.setText(new DecimalFormat("0.00%").format(res3));
        jLabel4.setText(new DecimalFormat("0.00%").format(res4));
        
        jLabel13.setText("Готово");
        
        jDialog1.setVisible(false); //Здесь вырубил
    }

PM MAIL   Вверх
powerOn
Дата 25.7.2008, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Нужно всю обработку, вместе с кодом отображения диалога, в отдельный поток выносить. 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Hashashin
Дата 25.7.2008, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А можно пример? Я с джавой еще не очень лажу(
PM MAIL   Вверх
powerOn
Дата 25.7.2008, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Думаю что можно так:

Код

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

    Runnable runnable = new Runnable()
    {
        public void run()
        {

            final JDialog dialog = new JDialog(NewJFrame.this, true);

            dialog.setLocationRelativeTo(NewJFrame.this);
            dialog.setTitle("In progress...");

            // запускаем диалог в ещё одном потоке, что бы не приостанавливать выполнение бизнес-кода.
            new Thread(new Runnable()
            {
                public void run()
                {
                    dialog.setVisible(true);
                }
            }).start();

            // Бизнес-код здесь
            try
            {
                Thread.sleep(3000);
            }
            catch (InterruptedException ex)
            {
                Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
            
            // закрываем диалог.
            dialog.setVisible(false);
            dialog.dispose();
        }
    };

    Thread thread = new Thread(runnable);
    thread.start();
}



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Hashashin
Дата 25.7.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Огромное спасибо, мне очень помогло!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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