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

293
10 февраля 2017, 03:05

Задумка следующая: я добавляю в БД запись, но перед этим хочу немного "проанимировать" процесс добавления, выводя в консоль последовательно значения: 10%...20%...30%... и т.д. до конца... в конце вывести слово "Добавлен!". Каждый процент необходимо выводи с интервалом в секунду, т.е. сначала секунда без информации, потом через секунду вывести 10%..., еще через секунду 20%... и т.д. Вроде все получается, но слово "Добавлен" вылетает уже в самом начале работы программы, да и вообще вся программа летит вперед своей жизнью совершенно не дожидаясь пока проработает до конца блок кода с таймером. Поясните пожалуйста, как правильно записать, чтобы программа дождалась окончания работы в блоке таймера и только потом в зависимости от успешного или неуспешного добавления записи, проработала дальше.

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("Добавлен"!);
}
}
Answer 1

Если Timer не принципиален

//создаем новый поток
    Thread mThread = new Thread(new Runnable() {
        // то что будет выполняться в потоке
        public void run() {  
            int proc = 0;
            while(proc < 100) {
                proc = proc + 10;
                System.out.print(proc + "%...");
                try {
                    Thread.sleep(1000); // задержка 1000 мс
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            // можно в это место перенести вывод и убрать Thread.join(); тогда основной поток висеть не будет  
        }
    });
    //запускаем поток
    mThread.start();
    //подождем пока поток завершит свое исполнение 
    mThread.join();
    System.out.println("Добавлен");
READ ALSO
Что выбрать - Swift или Java, или все вместе? [требует правки]

Что выбрать - Swift или Java, или все вместе? [требует правки]

Прошу дать советЯ начал проходить курс по Swift

579
Пытаюсь перевести код из Pascal в Java. Не получается. помогите пожалуйста [требует правки]

Пытаюсь перевести код из Pascal в Java. Не получается. помогите пожалуйста [требует правки]

Суть алгоритма в вычислении определенного интеграла квадратурным методом Гауссаg10c1,

266
Кастомизация switch button android

Кастомизация switch button android

Как сделать такую кнопку в Android?

282