Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/68: Рейтинг темы: голосов - 68, средняя оценка - 4.78
5 / 5 / 5
Регистрация: 24.10.2011
Сообщений: 269

Как сделать задержку выполнения цикла?

07.03.2012, 14:56. Показов 12998. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне надо притормозить цикл:

Java
1
2
3
4
5
6
7
8
9
10
11
pex=0;
while (pex<=100) {
pex+=10;
repaint();
wait(1000); //задежка выполнения цикла
}
 
Но при компиляции выдаёт сообщение:
unreported exception java.lang.InterruptedException;
must be caught or declared to be thrown
wait(1000);
^

Казалось бы простейшая ситуация, а тут.......

Подскажите пожалуйста в чём ошибка и как её исправить.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2012, 14:56
Ответы с готовыми решениями:

Как сделать задержку выполнения main() ?
neobhodimo sdelat zaderhku vipolnenya main(). Typa snachala useru vidat 'Usage: bla bla bla' On vvodit opredelennie parametry i tolko...

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

Как сделать задержку в программе?
Dalay в программе... Как установить заданный timeout?

14
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
07.03.2012, 15:14
тебе же компилятор уже ответил на вопрос.
".. Exception must be caught or declared to be thrown .."
Это значит, что так как метод wait() может выбросить InterruptedException, то нужно либо прописать этот эксепшн в throws твоего метода, либо поймать и обработать самому - обвернуть вызов wait() в try-catch.
0
5 / 5 / 5
Регистрация: 24.10.2011
Сообщений: 269
07.03.2012, 16:35  [ТС]
тебе же компилятор уже ответил на вопрос.
".. Exception must be caught or declared to be thrown .."
Это значит, что так как метод wait() может выбросить InterruptedException, то нужно либо прописать этот эксепшн в throws твоего метода, либо поймать и обработать самому - обвернуть вызов wait() в try-catch.
При попытки дописать public A() throws InterruptedException выдаёт ошибку в создании класа JPanel, где и находиться A(); а после выдаёт ещё ряд ошибок уже связаных с InterruptedException .

Если использовать связку try-catch тоже ошибка
Java
1
2
3
4
5
6
7
8
9
try {
while (pex<=100) {
pex+=10;
repaint();
wait(1000); //задежка выполнения цикла
}
}
catch (InterruptedException e) {
}
Скорее всего я не правильно его пытаюсь отловить, хотя вроде структура верна
Немог бы ты более детально объяснить "тёмному человеку", лучше конечно на примере как отловить эту ошибку.
0
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
07.03.2012, 16:52
Ты что то путаешь. Такая кончтрукция должна компилироваться без проблем. Если ты действительно видишь какие то сообщения компилятора об ошибках - пости их сюда.

Java
1
2
3
4
5
6
7
8
9
10
11
        int pex = 0;
        try {
            while (pex<=100) {
                pex+=10;
                repaint();
                wait(1000); //задежка выполнения цикла
            }
        }
        catch (InterruptedException e) {
            // do nothing
        }
0
5 / 5 / 5
Регистрация: 24.10.2011
Сообщений: 269
07.03.2012, 17:24  [ТС]
Цитата Сообщение от scroodge
Ты что то путаешь. Такая кончтрукция должна компилироваться без проблем. Если ты действительно видишь какие то сообщения компилятора об ошибках - пости их сюда.

Code
1
2
3
4
5
6
7
8
9
10
11
        int pex = 0;
        try {
            while (pex<=100) {
                pex+=10;
                repaint();
                wait(1000); //задежка выполнения цикла
            }
        }
        catch (InterruptedException e) {
            // do nothing
        }
Я прикрепил файл. Там в 67 строке и начинаеться конструкция try { }.
Когда откомпилируешь и запустишь нажми на -> -стрелочку вправо. После вызовется цикл изменит позицию "ног" и выведит в консольке ряд ошибок связанных с InterruptedException и wait
0
3 / 3 / 0
Регистрация: 25.08.2010
Сообщений: 213
07.03.2012, 18:18
проверять нет времени - но в данном случае по-любому надо ловить сообщение тока в вейте а не во всем циклею потому как сейчас ты вылетишь из цикла при первом же исключении, а не просто перейдешь на след итерацию
0
3 / 3 / 3
Регистрация: 09.07.2008
Сообщений: 422
07.03.2012, 18:28
Компилируется без проблем (у меня JBuilder) и работает в том виде, в каком ты выложил. Чем компилируешь? И, кстати, почему не юзаешь Thread?
0
5 / 5 / 5
Регистрация: 24.10.2011
Сообщений: 269
07.03.2012, 18:40  [ТС]
Цитата Сообщение от SVOLOCH
Компилируется без проблем (у меня JBuilder) и работает в том виде, в каком ты выложил. Чем компилируешь? И, кстати, почему не юзаешь Thread?
У меня JBuilder8, jdk 1.4 .Мне очень тяжело вериться, что у тебя не выводит ошибку, ты просто не нажимал на правую стрелочку (В правильном состоянии изминение размера линий "ног" происходит 10 раз с задержкой в 1 секунду). Почему не использую Thread? Если не ошибаюсь Thread используеться при создании потока. (потоки и таймеры в данной ситуации ненужны).
0
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
07.03.2012, 19:53
Всё компилируется и запускается. Окно разворачивется на весь экран, появляются две человекоподобных фигурки и не видно никаких стрелок. Звиняй, разбираться с твоим кодом и пытаться понять что там со стрелочками некогда. Кстати интересно - я подозревал что жбилдер убогий тул, но неужели в нём нет даже автоформатирования кода?
0
5 / 5 / 5
Регистрация: 24.10.2011
Сообщений: 269
07.03.2012, 20:07  [ТС]
Цитата Сообщение от scroodge
Всё компилируется и запускается. Окно разворачивется на весь экран, появляются две человекоподобных фигурки и не видно никаких стрелок. Звиняй, разбираться с твоим кодом и пытаться понять что там со стрелочками некогда. Кстати интересно - я подозревал что жбилдер убогий тул, но неужели в нём нет даже автоформатирования кода?
ОЙ блин....... Стрелочки на клавиатуре!!! (Вверх, вниз, влево и вправо(вот вправо я и мел в виду) )
0
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
07.03.2012, 20:22
стрелочки я уже нашёл таки )
смотри, основное тут это RTFM.
смотришь в консоль, там написан класс вылетевшего exception и строчка в твоём коде откуда он полетел. Если тебе этот exception незнаком - идёшь и читаешь javadoc к нему (вылетел IllegalMonitorStateException на вызове wait()). После этого идёшь и перечитываешь javadoc метода wait() и приходишь к выводу что если перед вызовом wait() ты захватишь монитор, то exception лететь не будет. Примерно вот так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
                        try {
                            while (pex <= 100) {
                                pex += 10;
                                repaint();
                                synchronized (this) {
                                    wait(1000);
                                }
                            }
                        }
                        catch (InterruptedException e) {
                        // do nothing
                        }
0
5 / 5 / 5
Регистрация: 24.10.2011
Сообщений: 269
07.03.2012, 21:12  [ТС]
Цитата Сообщение от scroodge
стрелочки я уже нашёл таки )
смотри, основное тут это RTFM.
....
Code
1
2
3
4
5
6
7
8
9
10
11
12
                        try {
                            while (pex <= 100) {
                                pex += 10;
                                repaint();
                                synchronized (this) {
                                    wait(1000);
                                }
                            }
                        }
                        catch (InterruptedException e) {
                        // do nothing
                        }
Read the fucking manual У меня то как раз его то и нет в JBuilder'e
Мне интересно как именно твоё изменение работает у тебя? У меня оно делает задержку экрана на 10 секунд, после перерисовывает "ноги" в конечное положение без пошагового перерисования с шагом задержки 1секунда

Большое спасибо тебе за попытку мне помочь, но пока что-то не получаеться
0
0 / 0 / 4
Регистрация: 14.08.2007
Сообщений: 307
07.03.2012, 21:50
как это "не получается" ?
по моему в этой ветке мы уже пофиксли тебе один compile time exception и один runtime exception.
Теперь формулируй новый вопрос и заводи новую ветку.
0
5 / 5 / 5
Регистрация: 24.10.2011
Сообщений: 269
07.03.2012, 22:51  [ТС]
Цитата Сообщение от scroodge
как это "не получается" ?
по моему в этой ветке мы уже пофиксли тебе один compile time exception и один runtime exception.
Теперь формулируй новый вопрос и заводи новую ветку.
Похоже я понял, что именно мне предлагаешь. Ты хочешь что бы я создал поток, который и будет решать мои проблемы или нечто похожее по структуре на поток
Если честно я хотел бы избежать потоки и таймеры. В С++ есть функция
sleep(1000); - задержка, но в Java я надеялся есть такая же функция, но боюсь оно всё реализовано через потоки

Ещё раз большое тебе спасибо за помощь.........
0
0 / 0 / 1
Регистрация: 21.03.2012
Сообщений: 13
21.03.2012, 15:38
Вот именно через потоки такая функция и доступна. Пишешь:
Java
1
2
3
4
5
6
7
8
9
10
while (pex <= 100) {
  pex += 10;
  repaint();
  try {
    Thread.sleep(1000);
  } catch (InterruptedException e) {
    // Можешь еще написать что делаеть если кто-то прервет сон,
    // но обычно его никто не прерывает!
  }
}
Здесь никакой поток не создается, это статический метод класса, который сам определит кому спать!!!
А вот wait(long timeout) это метод твоего объекта из класса java.lang.Object, который используется в значительно более сложных ситуациях. Например, когда ты знаешь, что кто-то, работаюший в другом потоке, сообшит тебе о том, что можно продолжить работу.
Здесь тебе это не нужно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.03.2012, 15:38
Помогаю со студенческими работами здесь

Как засечь время выполнения цикла или программы или какого-то оператора?
Как засечь время выполнения цикла или программы или какого-то оператора? И потом это время узнать.

Как сделать повторения этого цикла?
Как сделать так что бы эта &quot;прога&quot; выполнилась 10 раз? import java.util.Random; public class Srand { public static void...

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

Как сделать задержку выполнения программы?
У Финогенова К.Г. в книге самоучителя приведет пример очень компактной задержки вот код jmp $+2 в комментариях к коду написано...

Как сделать задержку выполнения программы на 3 сек
Очень простой вопрос, но ответа не могу найти! Как я понял, что бы сделать задержку выполнения программы, необходимо в тексте написать...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru