Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Progress Bar


Автор: Filin88 1.10.2008, 20:41
Есть несколько "плотных" циклов, которые нужно отобразить в одном баре. В итоге он не перерисовывается, и в конце цикла показывается сразу полная шкала. Они просто задавливают это отображение. Я не понимаю как это исправить. Были похожие темы, но конкретного ответа дано не было, тока грызлись между собой. И все же, как реализовать это дело с плотными циклами?

Автор: Старовъръ 1.10.2008, 22:54
1. Что такое плотные циклы?
2. Тут дело без потоков не обойдется. Сначала твой класс для перерисовки реализовывает интерфейс Runnable, в методе run() запускается хотябы repaint(), ну это на свое усмотрение. Но главное, что расчеты делаются в отдельном потоке, и после очередной итерации цикла вызывается метод SwingUtilities.invokeLater(), который будет напоминать GUI, чтоб тот перерисовался(т.е. будет вызываться описанный выше поток).

Автор: Filin88 11.10.2008, 20:10
Вроде сделал как говорил, но тут либо ничего либо полная шкала сразу. 

Код

    NewThread obj1 = new NewThread("1");
    NewThread obj2 = new NewThread("2");
    NewThread obj3 = new NewThread("3");    
    NewThread obj4 = new NewThread("4");    
    NewThreadPB pbOBJ1 = new NewThreadPB("25");
    NewThreadPB pbOBJ2 = new NewThreadPB("50");
    NewThreadPB pbOBJ3 = new NewThreadPB("75");
    NewThreadPB pbOBJ4 = new NewThreadPB("100");
    
    pb.setValue(0);
    obj1.t.start();
    try {
        obj1.t.sleep(500);
    } catch (InterruptedException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }
    SwingUtilities.invokeLater(pbOBJ1);
    

    
    pb.setValue(25);
    obj2.t.start();    
    try {
        obj2.t.sleep(500);
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    SwingUtilities.invokeLater(pbOBJ2);
    
    pb.setValue(50);
    obj3.t.start();    
    try {
        obj3.t.sleep(500);
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    SwingUtilities.invokeLater(pbOBJ3);
    
    pb.setValue(75);
    obj4.t.start();    
    try {
        obj4.t.sleep(500);
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    SwingUtilities.invokeLater(pbOBJ4);
    
    pb.setValue(100);


NewThread - это класс операции связанных с выборкой из БД

Код

class NewThreadPB implements Runnable
{
    Thread t;
    NewThreadPB(String value)
    {
        t = new Thread(this,value);
        
    }
    
    public void run() 
    {
        Index.pb.repaint();
        
    }

}

Ну а это поток с обновлением. pb- прогресс бар. Я что-то не так написал?

Автор: Старовъръ 12.10.2008, 22:16
Вобщем смотри http://www.javatalks.ru/ftopic5658.php.

Автор: Filin88 13.10.2008, 10:07
Ага, все работает. Старовер, спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)