2012-07-10 81 views
21

我最近遇到了Java JTextField的一個奇怪問題。當我運行下面的代碼(見下文)時,在文本字段中輸入「0」首先發送一個粘貼操作,然後輸入「0」。例如,如果將「文本」複製到剪貼板,則在鍵入「0」時鍵入「text0」。同樣,鍵入一個「4」替換前一個字符爲「4」(我猜這是一個刪除操作,然後鍵入「4」)。在鍵入「7」之前,鍵入「7」將清除文本字段。JTextField Numpad問題

下面是代碼:

import javax.swing.JFrame; 
import javax.swing.JTextField; 

public class Main { 

public static void main(String[] args) { 
    JFrame frame = new JFrame(); 
    JTextField text = new JTextField(); 
    frame.add(text); 
    frame.setSize(500, 500); 
    frame.setVisible(true); 
} 

} 

問題是在Red Hat Linux(使用VNC從Windows XP訪問)發生;一切都按預期在Windows XP上運行。

更新:在Ubuntu上的程序也沒有問題。我也嘗試過使用不同的鍵盤和VNC觀衆。

更新2:Java的版本

對於Red Hat:

java version "1.6.0_17" 
    OpenJDK Runtime Environment (IcedTea6 1.7.7) (rhel-1.17.b17.el5-x86_64) 
    OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode) 

對於XP:

java version "1.7.0_05" 
    Java(TM) SE Runtime Environment (build 1.7.0_05-b05) 
    Java HotSpot(TM) Client VM (build 23.1-b03, mixed mode, sharing) 

更新3:試圖運行在三個不同的紅帽計劃機器(全部在同一組工作),並且另外嘗試從不同的XP公司運行它電腦並重新啓動。

更新4:今天我開始工作,發現問題已經神奇地消失了。但是,真的很高興知道爲什麼它首先發生,以便我(和其他許多人遇到這個奇怪問題)知道如何在將來修復它。

+0

怪異的......聽起來像它可能是一個鍵盤映射問題?愚蠢的我知道,但你有沒有確保數字鍵盤鎖定和其他紅帽子應用程序的預期工作? – bcr 2012-07-10 17:44:08

+0

Numpad鎖定已打開,並且在其他程序中鍵入時一切正常。我也嘗試使用不同的鍵盤 - 沒有運氣。 – lrAndroid 2012-07-10 17:53:16

+0

在這裏找到了一些東西:http://www.rvdavid.net/how-to-get-the-use-of-your-number-pad-back-in-ubuntu/ 這是Ubuntu的當然,但它可能是在你的情況類似的東西? – vaisakh 2012-07-10 17:59:24

回答

-2

檢查終端,功能下的「禁用應用程序鍵盤模式」。

+0

我假設你的意思是在膩子中做這個?沒有運氣。 – lrAndroid 2012-07-16 17:31:03

+0

「終端,功能」?你在說什麼? – WhyNotHugo 2012-07-16 19:54:42

0

這似乎是VNC的一個已知問題。根據官方VNC網站:

數字鎖定鍵可能不同步。斷開連接,按客戶機的Num Lock鍵一次,然後重新連接。

來源:http://www.realvnc.com/products/viewerplus/known-issues/

這也說明了在VNC的常見問題解答:

問:鍵盤無法使用/鍵做奇怪的事情!

有一個共同的問題可以導致這種情況。如果按下Shift,Ctrl或Alt等修飾鍵,並且查看器窗口失去焦點或死亡,則「密鑰釋放」消息永遠不會到達查看器,因此永遠不會到達遠程服務器。然後遠程機器會認爲M是Ctrl-M等。我們已經做了各種事情來減少發生這種情況的可能性;例如,查看者在失去焦點時會自動釋放各種修飾符,但仍然可能發生,並且可能會造成混淆。解決方案很簡單:只需按下並釋放卡住的修改鍵即可。如果你不知道它是什麼,那麼一次嘗試一個。

來源:http://www-hep.nhn.ou.edu/d0/software/vnc-3.3.2r2/faq.html

如果此信息表明您的問題,那麼這可能是因爲當問題「神奇地消失了」的數字鍵盤只是在同步使用VNC在當天進出同步其他(這當然意味着問題可能再次出現)。

+0

那麼,爲什麼這個問題只會發生在Java程序(通過Eclipse創建)中,而不會發生在任何其他程序中?此外,問題只與數字鍵相關,而不是整個鍵盤。此外,什麼修飾鍵甚至可以導致數字鍵盤上的「0」鍵粘貼? – lrAndroid 2012-07-18 18:32:18

+0

因此,當您在其他應用程序(通過VNC在Red Hat上)中使用Num Pad時,它可以在Java程序出現故障的同時正常工作嗎? – asteri 2012-07-18 18:35:08

+0

正確。這個問題似乎只發生在我的Java程序中。 – lrAndroid 2012-07-18 18:38:30

1

嘗試將此代碼放在程序的開始處。

KeyboardFocusManager.setCurrentKeyboardFocusManager(new DefaultKeyboardFocusManager(){ 
    public boolean dispatchKeyEvent(KeyEvent e) { 
     if (e.getKeyLocation() == KeyEvent.KEY_LOCATION_NUMPAD){ 
      return true; 
     } 
     return super.dispatchKeyEvent(e); 
    } 
}); 
1

那麼很難給出準確的答案爲什麼,但它不是一個真正的奇怪的現象。通常當VNC或遠程桌面共享發生時,一臺機器的鍵盤和鼠標事件被傳輸到另一臺機器。完成此映射後,可能會出現錯誤的行爲,尤其是剪貼板複製粘貼的情況。它不僅發生在Linux世界,也發生在Windows世界。

我用自己的經驗告訴這個。在我的工作場所,我們經常使用其他機器,其中一些機器運行XP,另一些機器運行Windows 7.一臺機器上的剪貼板複製操作以及粘貼在遠程機器上的操作在某些系統上運行,並且在其他系統上運行失敗。

引用另一個這樣的經驗與Java和遠程桌面訪問,我有一個Java應用程序運行在我的月食。當我從其他一些機器進入我的機器時,我發現eclipse完全無法啓動應用程序。爲了它的工作,我需要首先在我自己的系統上啓動它,讓應用程序繼續運行,然後從另一個應用程序中運行rdc。

只是想象一下,如果Windows XP和Windows 7的情況屬於同一個家族。人們只能希望在使用Linux和Windows的同時使用VNC時可能不會發生這種古怪事情:)

如上所述,很難對它發生的原因過於精確,但可以肯定地說這是純粹是在操作系統級別發生的事情,而不是在擺動框架級別。

1

我不知道,但我只是回答,試圖幫助:

我與IcedTea項目的經驗是壞的。我不記得發生了什麼,但是當時安裝官方的Java JRE解決了我的問題。 Id est:Oracle提供的JRE。

http://java.com/en/download/index.jsp