Получить текущий экземпляр Runnable
Я делаю приложение, которое позволяет пользователям просматривать списки задач, хранящихся в разных базах данных. Итак, что происходит, у меня есть список имен баз данных для просмотра (хранится в виде текстового файла). Программа загружает первую базу данных в этом списке и отображает ее содержимое. Затем из меню я разрешаю пользователям выбирать другую базу данных в списке. (Вроде как, я хочу просмотреть задания для Энди, а теперь и Боба, и теперь Карла...).
Проблема в том, что я не знаю, как обновить пользовательский интерфейс, чтобы отображалось содержимое новой базы данных. Тривиально удалить задачи, перечисленные в данный момент, прочитать из БД, а затем снова заполнить. Но я не могу получить этот код (из моего драйвера базы данных Singleton), потому что мне понадобится доступ к экземпляру моего Runnable, который был загружен в EventQueue (все мои JComponents являются частными, как со всеми учебниками, с которыми я до сих пор сталкивался)). Я смотрю на методы get/peek в EventQueue, но они, кажется, не являются тем, что мне нужно, поскольку они возвращают AWTEvents, и я не вижу никакой связи между AWTEvent и Runnable, кроме java.lang.Object.
Итак, возможно ли получить текущий Runnable? Как?
Заранее спасибо за любые рекомендации.
2 ответа
Я подозреваю, что вы идете об этом неправильно. Что вы хотите сделать, это изменить базы данных из класса управления (используя номенклатуру MVC). Например, допустим, что вы загружаете доступные базы данных в JList, затем в элементе управления для этого компонента, например ListSelectionListener, вы выполняете SwingWorker, который загружает новую базу данных и затем отображает результаты в графическом интерфейсе либо через пару публикаций / процессов. методы или в готовом методе. Код базы данных (модель) не должен знать ничего о представлении или части графического интерфейса вашего кода (Runnable, как вы его называете).
В Swing есть хороший урок о Concurency, и никто не может сказать об этом, он устарел
у вас есть два варианта
1) Runnable#Thread
, но все выходные данные в GUI должны быть обернуты в invokeLater()
подробнее в уроке о Concurency in Swing
2) или с помощью SwingWorker