![]() |
|
Модераторы: javastic, AntonSaburov |
![]()
|
|
| alex111 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 28.11.2007 Репутация: нет Всего: нет |
Есть код:
if (!BTThread.isAlive()) //BTThread — поток { BTThread.start(); } Выбрасывается ошибка, типа поток уже запущен. Почему это может происходить и как этого можно избежать? |
|||
|
||||
| eugine_s |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
||||
|
||||
| javastic |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1214 Регистрация: 18.3.2005 Где: St.Petersburg Репутация: 19 Всего: 27 |
alex111, Да потому что пвторно уже запущенный поток нельзя запускать =)
Ты его можешь приостановить, оживить или прибить -------------------- 01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011 scjp, mcp |
|||
|
||||
| alex111 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 28.11.2007 Репутация: нет Всего: нет |
Ошибка: IllegalThreadStateException.
Возможно, она возникает из-за того, что я пытаюсь повторно запустить отработавший поток, т.е. каждый раз надо создавать новый поток? |
|||
|
||||
| javastic |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1214 Регистрация: 18.3.2005 Где: St.Petersburg Репутация: 19 Всего: 27 |
А як же ты ещё хотел? Если тебе его нужно несколько раз вызывать при определённых событиях то в методе run сделай цикл, затем в потоке у тебя что-то выполняется, а затем делаешь ему wait. потом где нужно вызывай notify и он проснётся и выполнится ещё раз и опять уснёт. Можешь в цикл поставить условие с помощью которого цикл будет завершаться и поток будет отрабатывать последний раз.
-------------------- 01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011 scjp, mcp |
|||
|
||||
| alex111 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 28.11.2007 Репутация: нет Всего: нет |
Способ wait/notify принял.
Ещё вопрос: Что происходит, когда мы вызываем оператор new для работающего потока? Или лучше всё-таки, в случае его работы, останавливать его, а потом уже создавать новый? |
|||
|
||||
| javastic |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1214 Регистрация: 18.3.2005 Где: St.Petersburg Репутация: 19 Всего: 27 |
Каждый метод new создает новый эксземпляр класса. Какие ещё могут быть вопросы?
-------------------- 01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011 scjp, mcp |
|||
|
||||
| alex111 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 28.11.2007 Репутация: нет Всего: нет |
Да, но что происходит со старым потоком, если он в это время запущен: отрабатывает он до конца или прекращает своё выполнение.
Мы первый раз вызвали Thread1 = new Thread, запустили его, потом хотим ещё раз вызвать Thread1 = new Thread(). |
|||
|
||||
| W0LF |
|
||||||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
а чего бы это ему вдруг закончить работу?
вот те пример, безымянный класс -
и он будет работать, хотя и ссылки на него нет -------------------- iOS developer |
||||||
|
|||||||
| Shurik16 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 20.4.2007 Где: г.Хабаровкс Репутация: 1 Всего: 1 |
Вопрос:
А возможно использовать два и более потока одновременно, если да то в чем моя ошибка?
О коде, заставка с переливающейся надписью и звук. По отдельности работает, а вместе нет. |
|||
|
||||
| W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
Че пишет?
-------------------- iOS developer |
|||
|
||||
| Shurik16 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 20.4.2007 Где: г.Хабаровкс Репутация: 1 Всего: 1 |
В том и дело компилирует нормально эмулятор тоже работает правильно скидываю на телефон N70 Только надпись мигает.
|
|||
|
||||
| W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
Не, ну это понятно. ты можешь заполнить все пустые блоки исключений?
Типа так -
А потом посмотришь че там пишет -------------------- iOS developer |
|||
|
||||
| Shurik16 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 20.4.2007 Где: г.Хабаровкс Репутация: 1 Всего: 1 |
Я проверил с таким вариантом но не понял где смотреть WT25 в консоли пусто а в телефоне вроде бы нечего не выдало. Я уже недели бьюсь как об стенку. На заставке не играет звук а как переходит в меню проигрывает . Может там очередность или приоритеты.
|
|||
|
||||
| eugine_s |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
Эмулятор не дает гарантии правильности работы на телефоне, тем более эмулятор от Sun. Если хочешь, чтобы эмулятор более похожий результат давал для твоего телефона зайди на http://forum.nokia.com и там скачай эмулятор для Java S60.
Попробуй на процес отрисовки поставить минимальный приоритет.
Если не поможет, то создай где-то
и везде в catch() блоках ставь
а в методе paint() выводи строку:
Вообщем суть такая: на телефоне появляется ошибка, которой на эмуляторе не было, у телефона нет System.out потока, т.е. некуда выводить текст, поэтому нужно отловить ошибку (что и делается в try-catch блоках), запомнить эту ошибку (это мы делаем, записав ошибку в error) и вывести эту ошибку на экран(это делается в paint()-е). |
||||||||
|
|||||||||
![]()
|
FAQ раздела лежит здесь! |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |