Получить текущий экземпляр Runnable - PullRequest
1 голос
/ 05 ноября 2011

Я делаю приложение, которое позволяет пользователям просматривать списки задач, хранящиеся в разных базах данных. Итак, что происходит, у меня есть список имен баз данных для просмотра (хранится в виде текстового файла). Программа загружает первую базу данных в этом списке и отображает ее содержимое. Затем из меню я разрешаю пользователям выбирать другую базу данных в списке. (Вроде как, я хочу просмотреть задания для Энди, а теперь и Боба, и теперь Карла ...).

Проблема в том, что я не знаю, как обновить пользовательский интерфейс, чтобы отображалось содержимое новой базы данных. Тривиально удалить задачи, перечисленные в данный момент, прочитать из БД, а затем снова заполнить. Но я не могу получить этот код (из моего драйвера базы данных Singleton), потому что мне понадобится доступ к экземпляру моего Runnable, который был загружен в EventQueue (все мои JComponents являются частными, как со всеми учебниками, с которыми я до сих пор сталкивался) ). Я смотрю на методы get / peek в EventQueue, но они, кажется, не являются тем, что мне нужно, так как они возвращают AWTEvents, и я не вижу никакой связи между AWTEvent и Runnable, кроме java.lang.Object.

Итак, возможно ли получить текущий Runnable? Как?

Заранее спасибо за любые рекомендации.

Ответы [ 2 ]

3 голосов
/ 05 ноября 2011

есть хороший урок о Concurency в Swing , и никто не может сказать об этом, он устарел

у вас есть два варианта

1)Runnable#Thread, но все выходные данные в GUI должны быть обернуты в invokeLater(), более подробно в учебнике о Concurency in Swing

2) или с помощью SwingWorker

2 голосов
/ 06 ноября 2011

Я подозреваю, что вы идете об этом неправильно.То, что вы хотите сделать, это изменить базы данных из класса управления (используя номенклатуру MVC).Например, допустим, что вы загружаете доступные базы данных в JList, затем в элементе управления для этого компонента, скажем, ListSelectionListener, вы выполняете SwingWorker, который загружает новую базу данных и затем отображает результаты в графическом интерфейсе через пару публикаций / процессов.методы или в готовом методе.Код базы данных (модель) не должен знать ничего о представлении или части GUI вашего кода (Runnable, как вы его называете).

...