Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 2
Регистрация: 07.06.2015
Сообщений: 151
1

Timer в консольном приложении Java

08.02.2017, 20:44. Показов 1781. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задумка следующая: я добавляю в БД запись, но перед этим хочу немного "проанимировать" процесс добавления, выводя в консоль последовательно значения: 10%...20%...30%... и т.д. до конца... в конце вывести слово "Добавлен!".
Каждый процент необходимо выводи с интервалом в секунду, т.е. сначала секунда без информации, потом через секунду вывести 10%..., еще через секунду 20%... и т.д.
Вроде все получается, но слово "Добавлен" вылетает уже в самом начале работы программы, да и вообще вся программа летит вперед своей жизнью совершенно не дожидаясь пока проработает до конца блок кода с таймером.
Поясните пожалуйста, как правильно записать, чтобы программа дождалась окончания работы в блоке таймера и только потом в зависимости от успешного или неуспешного добавления записи, проработала дальше.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.Timer;
import java.util.TimerTask;
 
public class MyTimer{
    public static int proc = 0;
 
    public static void main(String[] args){
 
        final Timer writeTime = new Timer();
        writeTime.schedule(new TimerTask() {
            
            @Override
            public void run(){
                if(proc < 100) {
                    proc = proc + 10;
                    System.out.print(proc + "%...");
                }
            }
        },1000,1000);
        System.out.println("Добавлен"!);
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2017, 20:44
Ответы с готовыми решениями:

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

Timer в консольном приложении
Доброе время суток! Подскажите пожалуйста, как в консольном приложении создать таймер, который...

Использование Timer в консольном приложении
как использовать класс timer в консольном приложении например я хочу вызывать один метод раз в...

Код который работает в консольном приложении в приложении Windows Forms выдает ошибку
Есть код для записи видео с экрана. В консольном приложении он работает, записывает все как нужно....

5
Эксперт функциональных языков программированияЭксперт Java
4539 / 2732 / 486
Регистрация: 28.04.2012
Сообщений: 8,628
08.02.2017, 22:15 2
Цитата Сообщение от Tim_van_Leyden Посмотреть сообщение
Вроде все получается, но слово "Добавлен" вылетает уже в самом начале работы программы, да и вообще вся программа летит вперед своей жизнью совершенно не дожидаясь пока проработает до конца блок кода с таймером.
Естественно, ведь таймер работает в отдельном потоке.
0
0 / 0 / 2
Регистрация: 07.06.2015
Сообщений: 151
09.02.2017, 12:48  [ТС] 3
Можете показать пример использования таких таймеров в консольных приложениях, чтобы все работало друг за другом как и должно?
0
Эксперт функциональных языков программированияЭксперт Java
4539 / 2732 / 486
Регистрация: 28.04.2012
Сообщений: 8,628
09.02.2017, 18:49 4
Цитата Сообщение от Tim_van_Leyden Посмотреть сообщение
чтобы все работало друг за другом как и должно
Во-первых, не должно, во-вторых, вполне очевидно, что нужно перенести System.out.println("Добавлен"!); в метод run таски, например, а в-третьих, зачем тебе вообще тайме, если тебе нужно всё друг за другом?
0
0 / 0 / 2
Регистрация: 07.06.2015
Сообщений: 151
09.02.2017, 21:16  [ТС] 5
В конечном итоге получается код следующего вида
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
30
import java.util.Timer;
import java.util.TimerTask;
 
public class MyTimer{
 
    public static void main(String[] args){
 
        Thread mThread = new Thread(new Runnable() {
 
        public void run() {  
           
            for(int proc=0; proc < 100; proc += 10) {
                
                System.out.print(proc + "%...");
 
                try {
                    Thread.sleep(1000); 
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    });
    
    mThread.start();
    mThread.join();
 
    System.out.println("Добавлен");
    }
}
0
Эксперт функциональных языков программированияЭксперт Java
4539 / 2732 / 486
Регистрация: 28.04.2012
Сообщений: 8,628
10.02.2017, 00:21 6
Tim_van_Leyden, ты понимаешь, чем это отличается от тамймера? Впрочем, видимо, тебе это не важно.
0
10.02.2017, 00:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2017, 00:21
Помогаю со студенческими работами здесь

IdTelnetClient в консольном приложении
Народ подскажите как заставить работать IdTelnetClient в консольном приложении может кто то...

Многопоточность в консольном приложении
Осуществил многопоточную работу приложения, но проблема в том, что через syncronize не хочет ничего...

Отладка в консольном приложении Qt
Прошу не ругаться :) Проблема - не работает отладка в консольном приложении Qt. Ставлю точку...

Чат в консольном приложении
Помогите пожалуйста создать чат в консольном приложении. Вот хотела с подругой початиться. Очень...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru