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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с визуализацией нового JFrame 
V
    Опции темы
Orange
Дата 18.7.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 6.9.2004
Где: Russia, Moscow

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



Привет!
Столкнулся с такой вот проблемой и ввиду малого опыта работы со Swing не могу понять как её решить.
Есть два класса:
Код

pulic class MainFrame{
MainFrame(){

// здесь создание кнопок, текстфилдов и расстоновка лэйаутов
}
public static void main(String[] args) {
        // TODO Auto-generated method stub
         
           
        MainFrame mainFrame = new MainFrame();
        mainFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        mainFrame.setVisible(true);

         

    }

 public void actionPerformed(ActionEvent e) {

        if (e.getSource() instanceof Component) {
            System.out.println(e.getWhen());
            Component c = (Component) e.getSource();
            if (c.getName().equals(IMPR_CMD)) {

                            
                Xmlparser x = new Xmlparser();
                
                  try { x.emulationProcess(initApl);
                   } catch (IOException ex) { } catch (InterruptedException
                  iex) { }
                 
            }
                          }
 }
}

и
Код

public class Xmlparser extends JFrame{

 void emulationProcess(String subsys) throws FileNotFoundException,
            IOException, InterruptedException {
         
        ......
        ......

        createPrgBar();           
        
        for (int i = 0; i < ar.size(); i++) {
            SitEdit s = new SitEdit(passtoexport + ar.get(i) + ".xml",subsys);
            try {
                
                s.createXMLsForInput(); // Здесь идёт сложный парсинг
                
                System.out.println(i + "\n");
            } catch (Exception e) {
                System.out.println("Output file not found! " + ar.get(i));
            }
        }
 }

 private void createPrgBar() {
    
       JFrame.setDefaultLookAndFeelDecorated(true);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        JComponent newContentPane = new PrgBar();
        newContentPane.setOpaque(true);
        frame.setContentPane(newContentPane);
        frame.setBounds(100, 100, 700, 500);

        frame.pack();
        frame.setVisible(true);
 }

}


Проблема состоит в том, что когда в MainFrame на нажатие кнопки срабатывает листенер - функция createPrgBar() в Xmlparser классе не визуализирует мой прогресс бар(!хотя и отображает его в трее) и показывает его только по завершению работы цикла в Xmlparser классе в состоянии процентов на 80 завершенным.

Что больше всего удивило, что всё работает нормально, когда я запускаю emulationProcess() в тестовом main в Xmlparser классе "вручную"(следовательно проблемма не в работе createXMLsForInput()). Возникает подозрение, что визуализации прогрессбара мешает нажатая кнопка в MainFrame, НО с другой стороны всё работает в случае, если я запускаю MainFrame, но в Xmlparser комментирую createXMLsForInput().



--------------------
Пару дней назад я познакомился с мальчиком......
PM MAIL ICQ   Вверх
AntonSaburov
Дата 18.7.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



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

Чтобы такого не происходило надо в обработчике делать отдельный тред и в нем уже все далть. А из собственно обработчика как можно быстрее надо выходить. Правда тогда надо как-то блокировать повторный запуск задачи, но это уже совсем другая история.
PM MAIL WWW ICQ   Вверх
Orange
Дата 21.7.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 6.9.2004
Где: Russia, Moscow

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



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


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

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