Я написал графический интерфейс для работы устройства чтения карт, в основном состоящий из кнопки ADD, которая вызывает диалог FileChooser
и ставит в очередь выбранный File
на CardHopper, который визуально отображается как JList
.
Теперь я хочу, чтобы процессор (другой JFrame
в другом потоке) мог выполнять запросы устройства чтения карт; например прочитайте открытку и отправьте мне. До того, как кард-ридер имел графический интерфейс, это была просто модель, которая работала в том же потоке, что и процессор, поэтому я мог просто вызвать его метод readCard()
. Теперь, когда он находится в отдельном потоке, кажется, что правильный способ общения - это передача сообщений.
Я собирался реализовать что-то, используя PriorityBlockingQueue
, в результате чего ЦП будет put
команду чтения карты в очереди, а CardReader будет take
и выполнит команду, пока я не пойму, что поток CardReader будет обычно его блокируют где-то в его Swing-коде, предоставляемом NetBeans, в ожидании события графического интерфейса пользователя и в ожидании появления чего-либо в моей очереди событий. Более того, этот «внутренний» запрос изменил бы модель данных - поэтому, даже если бы я мог каким-то образом выполнить какой-то код в модели, было бы кошерно «пускать» уведомления в графический интерфейс пользователя ListDataListeners
, пока GUI ждет событий GUI?
Надеюсь, это не слишком загадочно - я все еще пытаюсь обнять механику графического интерфейса и потоков.