全部成立,獨家訪問被另一個線程的Java smartcardio
我已經意識到在這個網站許多有用的答案,但我已經找到了需要張貼我的第一個問題(如果你注意到有什麼在我的崗位還有待提高,讓我知道)。
我有一箇中等大小的Java程序,帶有充當「中間人」和控制器的GUI。在信息流的一端,它通過HTTP服務器發送和接收數據。另一方面,它正在與數據最終與智能卡交換的API進行交互。在「中間」是GUI,日誌記錄和一些其他功能。
還有一個功能(通過GUI啓動)偶爾將更新加載到智能卡。否則通過HTTP啓動與智能卡的交換。
問題是在這兩種模式之間切換時(將http傳送給智能卡,然後切換到加載更新,反之亦然)。
當我這樣做,我的結論我碰上
CardException的問題:由另一個線程
成立專享由sun.security.smartcardio
爲拋出搜索網頁顯示該例外似乎來自的代碼是
void checkExclusive() throws CardException {
Thread t = exclusiveThread;
if (t == null) {
return;
}
if (t != Thread.currentThread()) {
throw new CardException("Exclusive access established by another Thread");
}
}
我的第一個想法是我需要實例化SmartCard API
每次我需要它(然後將其設置回null),而不是像我最初一樣的整個程序。
這適用於通過HTTP的交流與我想,這是因爲每個請求handle()
方法是一個新的線程。
在GUI中,更新由ActionEvent
啓動,該實例構成CardUpdate
的實例。在那個類中,然後獲得SmartCard API
的實例。
我想也許我有更好的運氣,如果當actionPerformed
觸發我把行動上不同的,暫時的,線程。到目前爲止,沒有。
我用像最近的:
SwingWorker worker = new SwingWorker<ImageIcon[], Void>() {
發現使用,我可以做一個更新,然後返回到http交流,但我不能這樣做的另一個更新(每SwingWorker類的一次性使用規定)
我又試圖根據需要做這樣的事情
進行多次private class GUICardUpdate extends SwingWorker<Integer, Void > {
但後來我又回到了我原來的問題。我也試過,只是做一個簡單的附加線程關閉GUI類以這種方式:
public class GUI extends javax.swing.JFrame implements ActionListener, Runnable
但是這並沒有什麼不同。
也許我不太瞭解線程或者我可能忽略了一些簡單的東西。有人有主意嗎?
謝謝!
謝謝,這絕對是一個很好的領導,我看到我打電話的框架在哪裏使用開始和結束方法。我將與該框架的開發人員一起工作,看看我能否最終解決問題。 –
約翰,它解決了嗎? –
就我所見,checkExclusive()不是Card Interface的一部分,而是它是CardImpl的一部分,它不可訪問。如果我錯了,請讓我知道。 – planty182