我已經寫了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