2014-09-19 56 views
1

我有一個便宜的磁卡閱讀器,就像一個鍵盤。我連接它並刷卡,並將所有卡數據輸入到計算機中。但由於某種原因,它在Java中不起作用。它可以在我嘗試過的所有非Java的環境中工作。Java卡閱讀器出現亂碼

什麼是卡上(實際上在刷卡SO編輯卡):

;00548757802?

當使用Java:

;0◘)P87┼7\02? 
_005487578D♥ 
;005487G802? 
_005*J657802{ 
♣00548I5♣802? 
;≥T548757♠╢·? 
≥T54875I↑:? 

正如你所看到的,它的每一次不同了。然而,讀者在數據之後發送了一個換行符,Java看起來可以識別。

我讀輸入代碼:

// Bound to a JTextField 
public void keyTyped(KeyEvent e) { 
    System.out.print(e.getKeyChar()); 
} 

JTextField中還顯示亂碼的文字。

這裏有什麼問題,我該如何解決?

回答

0

好吧,我想通了。我便宜的$ 15讀卡器被設置爲使用alt代碼輸入數據,而不是簡單的按鍵。我可以使用我在網上找到的實用程序對它進行重新編程,以模擬普通鍵盤,而不是爲每個字符輸入alt代碼。

1

看起來您已將KeyListener添加到JTextField,該JTextField使用特定於每個平臺的Key Bindings。相反,請使用BufferedReader來閱讀System.in; readLine()方法應該能夠檢測行結束。

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 

爲了避免阻塞event dispatch thread,執行I/O中的SwingWorkerpublish()結果的背景,因爲他們變得可用,並在實施process()更新JTextField

+0

沒有任何代碼,只是文本框,它仍然搞砸了。這個問題也在Ubuntu中隨處可見,幾乎所有的應用程序,Java或其他。 – 2014-10-23 21:21:25

+0

您可能會檢查'file.encoding'系統屬性。 – trashgod 2014-10-24 10:22:37

+0

所有的Java程序都這樣做,而不僅僅是我的。 – 2014-12-07 07:38:37