Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX и обновления экрана / 22 сообщений из 22, страница 1 из 1
14.08.2015, 07:40
    #39029154
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
Например у меня идёт обработка данных, и я периодически делаю в цикле изменения прогрессбара
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    @FXML
    private ProgressBar progress;
...
    double size = cardFile.getList().size();
    double counter = 0;
    for(CardFileRecord cfr:cardFile.getList())
    {
        counter++;
        progress.progressProperty().set(counter/size);   
    }


Почему же я вижу только пустой прогресс-бар до начала, и полный в конце, а где ползущая полоска, как положено? Никак не могу найти где нужно рефреш дёргать.
...
Рейтинг: 0 / 0
14.08.2015, 07:42
    #39029155
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
И да, там довольно большой файл обрабатывается, просто я забыл внутри цикла многоточие поставить, что там до каунтера ещё много чего происходит.
...
Рейтинг: 0 / 0
14.08.2015, 08:45
    #39029170
korshun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
Делаете класс, который будет обрабатывать данные, наследуетесь от Service и в нем вызываете метод progressUpdate.
Ну и на сам PB не забудьте bind повесить: %progressBar%.progressProperty().bind(%yourServiceClass%.progressProperty)
А вообще это все гуглится за 5 секунд.

XDiaBLoПочему же я вижу только пустой прогресс-бар до начала, и полный в конце
Потому что, если выполнять "обработку данных" в основном потоке, вся форма висит и ждет, когда эта обработка закончится.
...
Рейтинг: 0 / 0
14.08.2015, 08:46
    #39029172
korshun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
korshunв нем вызываете метод progressUpdate.
updateProgress, извиняюсь.
...
Рейтинг: 0 / 0
14.08.2015, 08:49
    #39029175
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
Спасибо, я уже так попробовал, нагуглил:
Код: 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.
26.
27.
28.
29.
void fillContractId(final CardFile cardFile) throws SQLException 
    {
        Connection conn = db.getConnection();
        final PreparedStatement ps = conn.prepareStatement("...");        
        Task<Integer> task = new Task<Integer>() 
        {
            @Override
            protected Integer call() throws Exception 
            {
                double size = cardFile.getList().size();
                double counter = 0;
                for(CardFileRecord cfr:cardFile.getList())
                {
                    ps.setString(1, cfr.getCardNumber());
                    ResultSet rs = ps.executeQuery();
                    if (rs.next())
                    {
                        cfr.setContractId(rs.getString(1));
                    }            
                    updateProgress(counter,size);
                    Thread.sleep(20);
                }
                return  0;
            }
        };
        progress.progressProperty().bind(task.progressProperty());
        new Thread(task).start();
        
    }


Тем не менее пока без толку.
...
Рейтинг: 0 / 0
14.08.2015, 09:00
    #39029184
korshun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
Сразу навскидку видно, что переменная counter у вас как задана 0, так нулю и равна :)
...
Рейтинг: 0 / 0
14.08.2015, 09:13
    #39029192
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
korshunСразу навскидку видно, что переменная counter у вас как задана 0, так нулю и равна :)
Тьфу, и правда. Потерял пока переделывал, спасибо.
...
Рейтинг: 0 / 0
14.08.2015, 09:16
    #39029197
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
XDiaBLo,

Потому что файл надо читать в фоновом потоке и из него правильно обновлять Event Dispatch Thread.
http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm

Иначе ты чтением файла занимаешь UI поток и ему некогда отрисовывать.
...
Рейтинг: 0 / 0
14.08.2015, 09:17
    #39029200
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
Сделал на потоках, теперь один поток запускается до завершения другого, и всё поломалось, зато прогресс-бар работает. Нужно как-то теперь ловить завершение выполнения одной задачи, перед запуском другой.
...
Рейтинг: 0 / 0
14.08.2015, 09:18
    #39029202
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
BlazkowiczXDiaBLo,

Потому что файл надо читать в фоновом потоке и из него правильно обновлять Event Dispatch Thread.
http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm

Иначе ты чтением файла занимаешь UI поток и ему некогда отрисовывать.
Вот потоки моё слабое место, нужно про них туториал изучить внимательно.
...
Рейтинг: 0 / 0
14.08.2015, 09:21
    #39029203
korshun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
XDiaBLo Сделал на потоках, теперь один поток запускается до завершения другого, и всё поломалось, зато прогресс-бар работает. Нужно как-то теперь ловить завершение выполнения одной задачи, перед запуском другой.
Делаешь 2 класса, наследуешься от Service, там есть такое свойство, как setOnSucceeded() - оно срабатывает тогда, когда задача завершилась успешно. Туда и прописывай старт второй задачи.
...
Рейтинг: 0 / 0
14.08.2015, 09:28
    #39029205
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
korshunXDiaBLo Сделал на потоках, теперь один поток запускается до завершения другого, и всё поломалось, зато прогресс-бар работает. Нужно как-то теперь ловить завершение выполнения одной задачи, перед запуском другой.
Делаешь 2 класса, наследуешься от Service, там есть такое свойство, как setOnSucceeded() - оно срабатывает тогда, когда задача завершилась успешно. Туда и прописывай старт второй задачи.
А у Thread нет ничего подобного разве?
...
Рейтинг: 0 / 0
14.08.2015, 09:31
    #39029207
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
join вот вроде то что нужно.
...
Рейтинг: 0 / 0
14.08.2015, 09:32
    #39029210
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
XDiaBLojoin вот вроде то что нужно.
Не, не то.
...
Рейтинг: 0 / 0
14.08.2015, 09:35
    #39029214
korshun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
В javafx все делается намного проще, зачем городить что-то с Thread и join, вам же дали ссылку, изучайте или сами в интернетах ищите материалы по словам "concurrency javafx".
...
Рейтинг: 0 / 0
14.08.2015, 09:36
    #39029216
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
аналога Application.ProcessMessages() нету что-ли?
Чтобы потоки не городить?
...
Рейтинг: 0 / 0
14.08.2015, 09:37
    #39029218
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
korshunзачем городить что-то с Thread+1
...
Рейтинг: 0 / 0
14.08.2015, 09:40
    #39029220
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
Petro123аналога Application.ProcessMessages() нету что-ли?
Чтобы потоки не городить?
ups нету там такого. Архитектура другая. (fps)
http://habrahabr.ru/post/217269/
...
Рейтинг: 0 / 0
14.08.2015, 09:46
    #39029227
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
korshunВ javafx все делается намного проще, зачем городить что-то с Thread и join, вам же дали ссылку, изучайте или сами в интернетах ищите материалы по словам "concurrency javafx".
Да у меня времени мало остаётся. Внутрь потока запихал вызов следующего потока, посмотрим что выйдет. Потом рефакторить, когда время будет. А сейчас дедлайн.
...
Рейтинг: 0 / 0
14.08.2015, 09:47
    #39029229
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
Ну вот, вроде работает как-то. А нормально потом, лет через -цать. В общем как всегда.
...
Рейтинг: 0 / 0
14.08.2015, 09:47
    #39029230
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
Спасибо. Ссылку потом почитаю.
...
Рейтинг: 0 / 0
19.08.2015, 12:54
    #39032264
XDiaBLo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JavaFX и обновления экрана
Спасибо, статью таки прочёл, и через Service сделал. Всё теперь как надо.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaFX и обновления экрана / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]