![]() |
Модераторы: javastic, AntonSaburov |
![]() ![]() ![]() |
|
satellite |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
Привет всем. Простой пример :
Во время выполнения цикла команда B не работает. Как только цикл заканчивается - начинает работать. Почему не работает в цикле? из-за Треда? Просто необходимо выводить на экран строки через определенные промежутки времени, при этом имея возможность выхода в другое меню. Промежутки времени делаю через Thread, как по другому не знаю ))) |
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
Нельзя в треде обработчика событий выполнять долгие операции, это справедливо даже для десктопа. Создай новый тред и там выполняй работу. Пока не выйдешь из метода, другие события будут лежать в очереди.
Пауза жуть, многое видал, но что бы так... ![]() Thread.currentThread().sleep(... -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
Начнемс =)
Form.setCommandListener(this) - значит, что ты на свою форму установил текущий commandAction, который переопределил здесь. commandListener - это листенер главного потока приложения. commandAction - его метод Далее - жмякаем на "START", происходит следующее - запускается цикл, в нем - создается поток, он не стартует, его я так понял ты юзаешь только для вызова sleep(1000) Но если мы глянем в мануал, то увидим, что sleep() - статик метод класса Thread =) , то етсь вызвать мона так - Thread.sleep(1000); Идем дальше - этим своим циклом ты вешаешь главный поток приложения - то есть пока цикл не отработает - никакая другая кнопка не нажмеццо! Если честно - то я ваще непонимаю, зачем этот цикл нужен, но если так хочеццо, то я помогу =) Переделанный код :
Попробуй - должно работать теперь ![]() Ну а ваще не принято из другого потока менять гуй. j2me это разрешает, но вот например технология blackBerry - нет! Это сообщение отредактировал(а) W0LF - 7.2.2008, 18:26 -------------------- iOS developer |
|||
|
||||
satellite |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
В цикле я хочу отображать строки (предложения) на экране, допустим, из массива, но суть не в этом. Каждая строка должна появляться через определенное время. Допустим, 1-я через 2000 мсек, 2-я через 3250 мсек и т.д. Т.е. мне нужны паузы перед отображением.
Подскажи как сделать паузу корректно, если можешь. Ребята очень благодарен, что откликнулись. |
||||
|
|||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
Если строк мало (3 - 5 штук), то можешь создавать новый тред для каждой строки, жизнь которого это Thread.sleep() и что нибудь полезное, без цикла. Если строк много, то создай один worker thread с очередью, типичная producer/consumer задача. Во втором случае не забудь synchronized(список) { добавить/взять строку }. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
satellite |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 19.9.2006 Репутация: нет Всего: нет |
У меня есть одна книга по J2ME, ее автор пишет, что если запустить такой код:
то результат будет такой: Main Thread: 1 Second Thread: 1 Main Thread: 2 Second Thread: 2 Main Thread: 3 Second Thread: 3 Main Thread: 4 Second Thread: 4 Main Thread: 5 Second Thread: 5 Т.е. он хотел сказать, что второй поток работает одновременно с главным. На деле получается что сначала отрабатывает MainThread, а потом SecondThread. Неужели он ошибается? |
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
На деле, получается, что
Main Thread: 1 Second Thread: 1 Second Thread: 2 Second Thread: 3 Second Thread: 4 Second Thread: 5 Main Thread: 2 Main Thread: 3 Main Thread: 4 Main Thread: 5 Вот это на деле у меня, а вот как будут распределятся потоки - это уж предвидеть сложно А работать они будут - параллельно -------------------- iOS developer |
|||
|
||||
![]() ![]() ![]() |
FAQ раздела лежит здесь! |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |