我已经写了GUI用于操作读卡器 - 主要由一个ADD按钮带来了一个对话框FileChooser
和队列所选File
到CardHopper,这在视觉上显示为JList
的。如何设计也响应后端事件的Java Swing模型?
现在我想为CPU(另一JFrame
,在另一个线程),能够使读卡器的要求;例如读一张卡并发给我。在读卡器拥有GUI之前,它只是一个与CPU相同的线程运行的模型,所以我可以称其为readCard()
方法。现在它在一个单独的线程上,似乎正确的沟通方式是消息传递。
我正要实现使用PriorityBlockingQueue
的东西,从而使CPU将put
队列和读卡器读取卡的命令将take
并执行命令,直到我意识到读卡器线程通常会在某处内阻塞其NetBeans提供的Swing代码,等待GUI事件,并且无法看到任何事物到达我的事件队列。而且,这种“后端”请求改变数据模型 - 所以即使我能莫名其妙地在模型中执行一些代码,这将是犹太到“火”通知给GUI的ListDataListeners
而GUI等待GUI事件?
我希望这不是太神秘 - 我仍然试图绕过GUI和线程的机制我的怀里。
+1,'SwingUtilities'是老板。 :) – Moonbeam
+1 - 执行OP的行为是Java程序中常见的(所有常见的)问题。请注意,你也可以使用SwingWorker线程类(当然取决于你的Java版本)来做同样的事情。 – aperkins
值得注意SwingWorker默认从6开始包含,但SwingX为以前的Java版本提供了一个backport,所以你仍然可以使用它! – berry120