Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
10 / 10 / 0
Регистрация: 13.10.2012
Сообщений: 155
1

Как осуществить задержку?

27.06.2013, 20:13. Показов 883. Ответов 4
Метки нет (Все метки)

Нужно реализовать задачу о не бьющих друг друга ферзях. Алгоритм, который используется в реализации задачи - backtracking (поиск с возвратом).

Следует представить визуально работу этого алгоритма. Я нарисовал доску с помощью "graphics" (AWT). Чтобы уследить перестановку ферзей на доске мне нужно делать определенную задержку, я использую следующий фрагмент кода:
Java
1
2
3
4
5
6
7
8
9
try 
{
Thread.sleep(100);
 // any action
} 
catch (InterruptedException e) 
{
    e.printStackTrace();
}
Но почему-то в это время вместо изображения доски - белое окно. Что надо добавить чтобы была видна расстановка? Может быть есть другой вариант задержки?

Вот, что было до добавления задержки:
Как осуществить задержку?


А вот, что после добавления:
Как осуществить задержку?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2013, 20:13
Ответы с готовыми решениями:

Как осуществить задержку в выполнении кода
Знаю, вопрос глупый, но никогда не юзал паузы. Как сделать паузу? Паузу между выполнениями строчек...

Как осуществить задержку отправки сообщений из ASP ?
Как осуществить задержку отправки сообщений из ASP ? Кто знает, как сделать такую вещь, как...

Рассчитать задержку распространения сигнала и задержку передачи данных
Здравствуйте. Рассчитайте задержку распространения сигнала и задержку передачи данных для...

Как осуществить в дельфи осуществить поиск по таблице из другой формы?
Очень выручите, плизз

__________________

Записывайтесь на профессиональные курсы Java-разработчиков
Обучение в Java Mentor с оплатой после трудоустройства
4
652 / 401 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
27.06.2013, 21:36 2
я так подозреваю, вы усыпляете основной поток программы?
0
10 / 10 / 0
Регистрация: 13.10.2012
Сообщений: 155
27.06.2013, 21:50  [ТС] 3
Цитата Сообщение от AckiyBolt Посмотреть сообщение
я так подозреваю, вы усыпляете основной поток программы?
Ну вроде да, вот более подробно приведу код:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public void layout(int i) //расстановка элементов на доске
    {
        if (i<n)
            for (int j=0; j<n; j++)
            {
                if (emptyHrz[j] && mainDiag[i+j] && secDiag[i-j+n-1])
                {
                    g2.setColor(Color.RED); 
                    g2.fillOval(2+i*(aWidth/n),2+j*(aHeight/n), aWidth/n, aHeight/n); //ставлю ферзя
                    
                    locInVrt[i]=j;
                    emptyHrz[j]=false;
                    mainDiag[i+j]=false;
                    secDiag[i-j+n-1]=false;
                    layout(i+1);
                
                    
                    locInVrt[i]=-1;
                    emptyHrz[j]=true;
                    mainDiag[i+j]=true;
                    secDiag[i-j+n-1]=true;
                    
                    
                    
                    if ((i+j)%2==0)
                        g2.setColor(Color.BLACK);
                     else
                        g2.setColor(Color.WHITE);
                    
                    g2.fillRect(2 + i*(aWidth/n), 2 + j*(aHeight/n), (aWidth/n), (aHeight/n)); //"прячу" не подходящего ферзя
                }
            }
        else
            {
                num++;
                printLoc();
//тут у меня уже ферзи расставлены на доске и я хочу показать это, для этого осуществляю задержку на 5 сек
                try {
                       Thread.sleep(5000);
                    } catch (InterruptedException e) {
                       e.printStackTrace();
                    }
            
            }
    }
0
652 / 401 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
27.06.2013, 22:09 4
вам нужно для этого дела другой поток сделать
0
10 / 10 / 0
Регистрация: 13.10.2012
Сообщений: 155
27.06.2013, 23:23  [ТС] 5
Цитата Сообщение от AckiyBolt Посмотреть сообщение
вам нужно для этого дела другой поток сделать
Я уже понял, только вот не получается, Вы могли бы помочь?

Добавлено через 8 минут
Я делал подобным образом, но ничего не получилось, точнее все то же самое...
Java
1
2
3
4
5
6
7
8
9
10
11
new Thread() {
                    @Override
                    public void run() {
                        try {
                               Thread.sleep(500);
                               // any action
                            } catch (InterruptedException e) {
                               e.printStackTrace();
                            }
                    }
                }.start();
Добавлено через 1 час 4 минуты
Решил попробовать вот таким образом, но ничего нужного не получил (вообще странно ):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
g2.setColor(Color.green); //выделение зеленым всей расстановки
                
                int b;
                for (int a=0; a<n; a++)
                    {
                        b=locInVrt[a];
                        g2.fillOval(2+a*(aWidth/n),2+b*(aHeight/n), aWidth/n, aHeight/n);
                    }
                
                
                long curTime = System.currentTimeMillis(); 
                System.out.println("Время: " +curTime);
                
                long outTime=curTime+5000;
                
                long curTime2=System.currentTimeMillis(); 
                while (curTime2<outTime) //тут я на 5 сек торможу, чтобы лицезреть расстановку, но херас два
                {
                    curTime2=System.currentTimeMillis();
                }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.06.2013, 23:23

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Как задать задержку ?
Итак нужно вызывать метод SendData() c заданным периодом N раз Делаю след. образом. Инициализирую...

Как сделать задержку?
package sevak_avet; import java.util.Calendar; import java.util.GregorianCalendar; import...

Как сделать задержку 1 ms ?
Частота cpu= 41 780 000 Hz. В сети нашел следующий код: long volatile a=def_msec*ms;...

Как рассчитать задержку ?
ширина канала 2Мб/с ,расстояние между узлами 6000 км,сигнал идет со с.с. , пакет длинною 1000...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.