2012-07-10 12 views
21

Recentemente ho avuto uno strano problema con Java JTextField. Quando eseguo il seguente codice (vedi sotto), digitando uno "0" nel campo di testo si invia prima un'azione di incolla, quindi si digita "0". Ad esempio, se "testo" viene copiato negli Appunti, "testo0" viene digitato quando digito "0". Allo stesso modo, digitando un "4" si sostituisce il carattere precedente con un "4" (immagino che questa sia un'azione di cancellazione, quindi il "4" è digitato). Digitando "7" si cancella il campo di testo prima di digitare "7".Problemi di JTextField con il tastierino numerico

Ecco il codice:

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); 
} 

} 

il problema si verifica su Red Hat Linux (accessibile tramite VNC da Windows XP); tutto funziona come previsto su Windows XP.

Aggiornamento: Nessun problema con il programma su Ubuntu. Ho anche provato a utilizzare diverse tastiere e visualizzatori VNC.

Update 2: Versioni Java

Per 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) 

Per 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) 

Aggiornamento 3: Provato in esecuzione il programma su tre differenti Red Hat macchine (tutte nello stesso gruppo al lavoro), e inoltre provato a eseguirlo da un diverso XP co mputer e riavvio.

Aggiornamento 4: Oggi sono arrivato al lavoro per scoprire che il problema era magicamente scomparso. Tuttavia, sarebbe davvero bello sapere perché il è accaduto in primo luogo in modo che io (e chiunque altro abbia incontrato questo strano problema) sappia come risolverlo in futuro.

+0

strano ... suona come potrebbe essere un problema di mappatura della tastiera? Stupido, lo so, ma ti sei assicurato che il blocco del tastierino numerico sia attivo e funzioni come previsto in altre applicazioni con cappello rosso? – bcr

+0

Il blocco del tastierino numerico è attivo e tutto funziona correttamente quando si digitano altri programmi. Ho anche provato a usare una tastiera diversa - senza fortuna. – lrAndroid

+0

Trovato qualcosa qui: http://www.rvdavid.net/how-to-get-the-use-of-your-number-pad-back-in-ubuntu/ Ovviamente è Ubuntu, ma potrebbe essere qualcosa di simile nel tuo caso? – vaisakh

risposta

-2

Selezionare "Disattiva modalità tastiera applicazione" in Terminale, funzioni.

+0

Suppongo che intendi farlo in Putty? Senza fortuna. – lrAndroid

+0

"Terminale, caratteristiche"? Di cosa stai parlando? – WhyNotHugo

0

Questo sembra essere un problema noto con VNC. Secondo il sito web VNC ufficiale:

Il tasto Num Lock potrebbe non essere sincronizzato. Disconnettersi, premere una volta il tasto Num Lock del computer client e quindi riconnettersi.

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

Questo dimostra anche nella FAQ di VNC:

D. La tastiera non funziona/chiavi fanno cose strane!

C'è un problema comune che può causare questo. Se si preme un tasto modificatore, come Shift, Ctrl o Alt, e la finestra del visualizzatore perde lo stato attivo o muore, il messaggio "key release" non arriva mai al visualizzatore e quindi non arriva mai al server remoto. La macchina remota penserà quindi che M è Ctrl-M, ecc. Abbiamo fatto varie cose per ridurre le possibilità che ciò accada; gli spettatori rilasciano vari modificatori automaticamente quando perdono la messa a fuoco, ad esempio, ma possono ancora verificarsi e possono confondere quando lo fa. La soluzione è semplice: basta premere e rilasciare il tasto modificatore che è bloccato. Se non sai quale sia, provali uno alla volta.

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

Se questa informazione è indicativo del vostro problema, allora può essere che quando il problema "magicamente scomparso", il Num Pad era semplicemente in sincronia con VNC in quel giorno e fuori sincronizzarsi con gli altri (il che ovviamente significa che il problema potrebbe ripresentarsi).

+0

Perché, quindi, il problema si verifica solo all'interno del programma Java (creato tramite Eclipse), ma non si verifica all'interno di altri programmi? Inoltre, il problema riguarda solo i tasti del tastierino numerico, non l'intera tastiera. Inoltre, quale tasto modificatore potrebbe persino causare l'incollaggio del tasto "0" sul tastierino numerico? – lrAndroid

+0

Quindi, quando si utilizza il tastierino numerico in altre applicazioni (su Red Hat tramite VNC), funziona correttamente nello stesso momento in cui si verifica un malfunzionamento nel programma Java? – asteri

+0

corretto. Il problema sembrava accadere solo all'interno dei miei programmi Java. – lrAndroid

1

Provare a inserire questo codice all'inizio del programma.

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

Beh, è ​​difficile dare una risposta precisa perché, ma non è davvero un fenomeno strano. Solitamente quando avviene una condivisione VNC o desktop remoto, gli eventi della tastiera e del mouse di una macchina vengono trasmessi a un'altra macchina. Una volta eseguita questa mappatura, ci potrebbe essere una buona probabilità che ci possa essere un comportamento errato, specialmente con la copia degli appunti, incollando. Succede non solo nel mondo di Linux, ma anche nel mondo di Windows.

Lo dico per esperienza personale. Sul mio posto di lavoro spesso rdc su altre macchine, alcune su XP e altre su Windows 7. L'azione di copia di appunti su una macchina e incollatura su macchina remota funziona su alcuni sistemi e fallisce su altri.

Citando un'altra esperienza simile con l'accesso desktop Java e remoto, ho un'applicazione java in esecuzione sul mio eclissi. Quando rdc nella mia macchina da alcune delle altre macchine, trovo che Eclipse non è in grado di avviare l'applicazione. Perché funzioni, devo prima lanciarlo sul mio sistema, mantenere l'applicazione in esecuzione e quindi rdc da un'altra alla mia.

Giusto per immaginare, se questo è il caso con Windows XP e Windows 7 che sono noti appartengono alla stessa famiglia. Si può solo sperare che qualcosa di simile possa non accadere quando si usano Linux e Windows insieme a VNC :)

Come detto, è difficile essere troppo precisi sul perché sta accadendo, ma si può sicuramente dire che questo è puramente qualcosa che accade al sistema operativo a livello di sistema operativo e non a livello di struttura swing.

1

non sono sicuro, ma sto solo rispondendo, nel tentativo di aiutare:

La mia esperienza con IcedTea è male. Non riesco a ricordare esattamente cosa sia successo, ma a quel tempo, l'installazione del Java JRE ufficiale ha risolto i miei problemi. Id est: il JRE fornito da Oracle.

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

Problemi correlati