|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 6
|
|
Периодический запуск не статического метода (без нажатия кнопки на форме)07.10.2011, 14:18. Показов 3468. Ответов 10
Метки нет (Все метки)
Добрый день.
После нажатия кнопки на форме запускаются несколько потоков (до 24), которые ведут долгий поиск (рекурсией) и параллельно складывают найденные результаты в статическое свойство ArrayList главного окна. На форме есть кнопка для вывода этих результатов. Можно ли как-нибудь обойтись без этой кнопки или чтобы обработчик ее нажатия запускался сам периодически? Если вызывать из другого класса, который extends TimerTask Ошибка non-static method setList1Items() cannot be referenced from a static context, даже если вызывать из класса-наследника главного класса, реализующего интерфейс Runnable, где периодически вызывается метод родительского класса, заполняющий список jList резудьтатами, никаких результатов в форме не выводится (а они в ArrayList есть) что нужно сделать с формой, чтобы вывести результаты? jList1.repaint() не помог...
0
|
|
| 07.10.2011, 14:18 | |
|
Ответы с готовыми решениями:
10
После нажатия кнопки в первой форме, становится невидимым TextBox во второй форме Как из обработчика Form1_KeyPress вызвать событие для нажатия заданной по имени кнопки на форме (кнопки 0-9) Как отправить все чекбоксыы без обновления страницы и без нажатия кнопки? |
|
81 / 81 / 8
Регистрация: 10.06.2011
Сообщений: 258
|
|
| 07.10.2011, 17:12 | |
|
Посмотри использование Callable, тогда не будет такой странной объектной сетки и можно будет разобраться, когда кто закончил работу. Ну или как минимум какой нибудь ThreadPool.
0
|
|
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 6
|
|
| 07.10.2011, 18:19 [ТС] | |
|
То есть все потоки должны быть не Runnable, а Callable? Куда они будут возвращать информацию, о том, что закончили поиск, и как проверять эту информацию?
Потом мне не обязательно дожидаться окончания их работы, т.к. это может быть очень долго, а результаты они добавляют в статический ArrayList главного класса уже в процессе своего выполнения, и эти результаты нужно выводить в jList главного окна (генерировать событие для обновления списка, как это делается при клике на кнопку)
0
|
|
|
81 / 81 / 8
Регистрация: 10.06.2011
Сообщений: 258
|
|
| 07.10.2011, 23:18 | |
|
Ну, начнём с того, что ArrayList не синхронизирован, по этому у тебя программа будет часто падать.
Callable возврощяет информацию туда, где ты её потребуеш. И этот метод ( call() ) блокирует, пока работа не завершена. Но если почитать документацию, то там будет всё точнее описано. А если просто нужно "периодически нажимать на кнопку", то в чём конкретно тогда проблемма? На каком участке кода выдаёт ошибку?
0
|
|
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 6
|
||||||
| 10.10.2011, 17:50 [ТС] | ||||||
|
действительно ArrayList не синхронизирован... Переделал на java.util.concurrent.CopyOnWriteArrayLis t
но в главном классе все равно оставил ArrayList, правда дописал модификатор volatile сделал класс PeriodTask, extends от главного, но реализующий интерфейс Runnable (с Callable не очень понятно)
хотя, если вызвать его из обработчика нажатия кнопки на форме, все выводит (пункты появляются) MainClass.findWords содержит ArrayList <String> найденных слов (проверено) Что еще нужно, чтобы список заполнялся автоматически, без нажатия на кнопку? Добавлено через 14 минут timerInterval - это private int timerInterval; в классе PeriodTask
0
|
||||||
|
|
||||||
| 10.10.2011, 21:14 | ||||||
|
прицепи к ArrayList Collections и получи synchronizedList - это раз.
ну и чтоб оно заработало надо триду сделать start(), например
0
|
||||||
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 6
|
||||||||||||
| 10.10.2011, 22:41 [ТС] | ||||||||||||
но функция, запущенная из триды
только из главного класса, если запустить из обработчика события нажатия кнопки, показывает... А там бесконечный цикл не запустишь... только при обработке события запускается Добавлено через 10 минут
0
|
||||||||||||
|
|
|||||||
| 10.10.2011, 23:18 | |||||||
|
а ты сделай этот лист final это тоже сделает его синхронизированным или так:
Добавлено через 19 минут
0
|
|||||||
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 6
|
|||||||||||||
| 11.10.2011, 13:42 [ТС] | |||||||||||||
можно так:
с CopyOnWriteArrayList так бы не мучился, там есть метод clone() оставлю пока CopyOnWriteArrayList класс PeriodTask надо сделать чтобы он стал потоком-демоном он ничего не делает, кроме как периодически вызывает метод главного класса setList1Items(); в котором происходит следующее:
177 строк 177 строк 177 строк но список не обновляется - он пустой а если нажать на кнопку, в обработчике которой стоит запуск того же метода setList1Items(); то список сразу заполнится значениями
0
|
|||||||||||||
|
81 / 81 / 8
Регистрация: 10.06.2011
Сообщений: 258
|
|||
| 11.10.2011, 13:51 | |||
|
Но final тут не поможет.
0
|
|||
|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 6
|
||||||
| 12.10.2011, 14:27 [ТС] | ||||||
|
NetBeans почему-то ругается, когда пытаешься вызвать clone() у объекта List
вот нашел что-то похожее, надо разобраться... http://developers.sun.ru/content/view/159/89/ Добавлено через 22 часа 16 минут В модели Swing все потоки приложения делятся на 3 типа: Начальный поток (initial thread) Поток обработки событий (event dispatch thread (EDT)) Рабочий поток (worker threads)
0
|
||||||
| 12.10.2011, 14:27 | |
|
Помогаю со студенческими работами здесь
11
Отслеживание нажатия кнопки на форме. Обработчик нажатия кнопки на форме Как в обработчике нажатия кнопки использовать локальную переменную другого метода? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|