![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Nodir |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 9.5.2006 Где: Bukhara --> T ashkent --> Seoul Репутация: нет Всего: нет |
Есть два Button` а. В первом кнопке есть такая функция.
Когда запускаю первую кнопку он начнет работать и никак не дает работать второму. Как можно делать так штобы пользователь мог нажать на вторую кнопку и прекратить работу первога ?... Добавлено @ 10:07 Sorry, ни тот прописал.
На втором кнопке поставил-->
Когда запускаю первую кнопку он начнет работать и никак не дает работать второму. Как можно делать так штобы пользователь мог нажать на вторую кнопку и прекратить работу первога ?... |
||||||||
|
|||||||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Весь GUI работает в одном потоке AWT Event Dispatch Thread, и пока ты не выйдешь из обработчика события весь GUI будет стоять. Тебе нужно в обработчике первой кнопки запустить отдельный поток:
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| newObject |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 29.6.2006 Репутация: нет Всего: 2 |
На самом деле это может и не помочь.
Можно в конце каждой итерации воткнуть sleep(5). Этого может быть достаточно. Так же можно воспользоваться методом InvokeLater(). Почитать по этому поводу можно: Майкл Могран "Java 2 Руководство разработчика." Глава 15 Разработка многопоточных приложений Иван Портанкин серия "Библиотека программиста" "Swing эфективные пользовательские интерфейсы" Глава 2 .... За кулисами системы обработки событий Пример из этой книги:
Последнию книгу ОЧЕНЬ рекомендую прочесть, как для конкретной проблемы так и для общего ознакомления. Это сообщение отредактировал(а) newObject - 10.7.2006, 09:02 |
||||
|
|||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
InvokeLater() - здесь точно нельзя применять, т.к. это опять будет работать в AWT Dispatch Thread и опять весь GUI встанет. А по поводу того что надо обязательно отдавать тики, это не совсем так. Thread-ды с равными приоритетами, будут получать процессорное время приблизительно поровну. Тем более, что AWT Dispatch Thread и так их отдает, если нет сообщений. А когда надо будет он свое получит, т.к. приоритет у него выше среднего. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| newObject |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 29.6.2006 Репутация: нет Всего: 2 |
Настоятельно рекомендую скомпилить и запустить пример из предидущего поста и рассказать про впечатление. Т.к. пример как раз и иллюстрирует работу GUI, в то время как выполняется поток метода InvokeLater. P.S. пример компилился под 1.5 все работало. |
|||
|
||||
| powerOn |
|
||||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
Твой пример работает правильно, не из-за того что используешь InvokeLater, а вот из-за этой строки:
Ты создаешь новый поток, и уже в нем запускаешь:
Конечно GUI не встанет при таком раскладе, поскольку код выполняется вне AWT Event Dispatch Thread. Вот если в 12 строке вместо метода start() вызывать метод run(), то GUI встанет. Так код тоже будет работать:
Это сообщение отредактировал(а) MoonCat - 11.7.2006, 12:25 |
||||||
|
|||||||
| newObject |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 29.6.2006 Репутация: нет Всего: 2 |
Во первых приношу свои извинения за неверную формулировку. Действительно нужно делать это в отдельном потоке.
Во вторых метод invokeLater был выбран для правильного изменения компонента. В третих MoonCat вы в сове время объясняли Zone51 что в методах lookup() и rebind() нужно указать протокол rmi. Где можно узнать об этом побольше, .т.к. в мануале и книгах что у меня есть ни слова об этом? Кстати если дадите рекомендации по моему открытому посту, буду благодарен! |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Попробуй почитать Java RMI от O'Reilly. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
Здесь есть переводы мануалов по основам RMI. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |