2012-07-10 15 views
21

Gần đây tôi đã gặp phải sự cố lạ với Java JTextField. Khi tôi chạy mã sau đây (xem bên dưới), nhập "0" vào trường văn bản trước tiên sẽ gửi hành động dán, sau đó nhập "0". Ví dụ: nếu "văn bản" được sao chép vào khay nhớ tạm, "text0" được nhập khi tôi nhập "0". Tương tự, nhập "4" thay thế ký tự trước bằng "4" (tôi đoán đây là hành động xóa, sau đó nhập "4"). Nhập "7" sẽ xóa trường văn bản trước khi nhập "7".Vấn đề JTextField với Numpad

Đây là mã:

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

} 

Vấn đề đang xảy ra trên Red Hat Linux (truy cập sử dụng VNC từ Windows XP); mọi thứ chạy như mong đợi trên Window XP.

Cập nhật: Không có vấn đề với chương trình trên Ubuntu. Tôi cũng đã thử sử dụng các bàn phím và người xem VNC khác nhau.

Cập nhật 2: Java phiên bản

Đối với 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) 

Đối với 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) 

Cập nhật 3: Cố gắng chạy chương trình trên ba khác nhau Red Hat máy (tất cả trong cùng một nhóm tại nơi làm việc), và bổ sung thử chạy nó từ một đồng XP khác mputer và khởi động lại.

Cập nhật 4: Hôm nay tôi đến nơi làm việc để thấy rằng vấn đề đã biến mất một cách kỳ diệu. Tuy nhiên, nó thực sự là tốt đẹp để biết lý do tại sao nó xảy ra ở nơi đầu tiên để tôi (và bất cứ ai khác nhiều người gặp phải vấn đề kỳ lạ này) biết làm thế nào để sửa chữa nó trong tương lai.

+0

lạ ... có vẻ như nó có thể là một vấn đề lập bản đồ bàn phím? Ngu ngốc tôi biết, nhưng bạn đã chắc chắn rằng khóa numpad đang bật và hoạt động như mong đợi trong các ứng dụng mũ đỏ khác? – bcr

+0

Khóa Numpad đang bật và mọi thứ hoạt động tốt khi nhập vào các chương trình khác. Tôi cũng đã thử sử dụng bàn phím khác - không may mắn. – lrAndroid

+0

Tìm thấy nội dung nào đó tại đây: http://www.rvdavid.net/how-to-get-the-use-of-your-number-pad-back-in-ubuntu/ Đó là Ubuntu, nhưng có thể là một cái gì đó tương tự trong trường hợp của bạn? – vaisakh

Trả lời

-2

Kiểm tra "Tắt chế độ bàn phím ứng dụng" trong Thiết bị đầu cuối, các tính năng.

+0

Tôi giả sử bạn có nghĩa là làm điều này trong Putty? Không may mắn. – lrAndroid

+0

"Thiết bị đầu cuối, tính năng"? Bạn đang nói về cái gì vậy? – WhyNotHugo

0

Điều này có vẻ là một vấn đề đã biết với VNC. Theo trang web chính thức của VNC:

Phím Num Lock có thể không đồng bộ. Ngắt kết nối, bấm phím Num Lock của máy khách một lần và sau đó kết nối lại.

Nguồn: http://www.realvnc.com/products/viewerplus/known-issues/

này cũng xuất hiện trong FAQ VNC:

Q. Bàn phím không hoạt động/phím làm những điều kỳ lạ!

Có một vấn đề phổ biến có thể gây ra vấn đề này. Nếu phím bổ trợ, chẳng hạn như Shift, Ctrl hoặc Alt, được nhấn và cửa sổ trình xem sẽ mất tiêu điểm hoặc chết, thông báo 'phát hành khóa' không bao giờ được hiển thị cho người xem và do đó không bao giờ đến máy chủ từ xa. Các máy từ xa sau đó sẽ nghĩ rằng M là Ctrl-M vv Chúng tôi đã làm những việc khác nhau để giảm cơ hội xảy ra điều này; người xem tự động phát hành các công cụ sửa đổi khác nhau khi họ mất tập trung, nhưng nó vẫn có thể xảy ra và có thể gây nhầm lẫn khi thực hiện. Giải pháp rất dễ dàng: chỉ cần nhấn và nhả phím sửa đổi bị kẹt. Nếu bạn không biết nó là gì, thì hãy thử chúng từng lần một.

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

Nếu thông tin này là dấu hiệu của vấn đề của bạn, sau đó nó có thể là khi vấn đề "một cách kỳ diệu biến mất," Num Pad chỉ đơn giản là đồng bộ với VNC vào ngày hôm đó và ra khỏi đồng bộ hóa trên những người khác (điều này tất nhiên có nghĩa là vấn đề có thể bị xáo trộn một lần nữa).

+0

Tại sao, sau đó, vấn đề chỉ xảy ra trong chương trình Java (được tạo thông qua Eclipse), nhưng không xảy ra trong bất kỳ chương trình nào khác không? Ngoài ra, vấn đề chỉ là với các phím numpad, không phải toàn bộ bàn phím. Hơn nữa, phím bổ trợ nào thậm chí có thể gây ra khóa "0" trên numpad để dán? – lrAndroid

+0

Vì vậy, khi bạn sử dụng Num Pad trong các ứng dụng khác (trên Red Hat thông qua VNC) nó hoạt động tốt tại cùng một thời điểm nó bị hỏng trong chương trình Java? – asteri

+0

Chính xác. Vấn đề này dường như chỉ xảy ra trong các chương trình Java của tôi. – lrAndroid

1

Cố gắng đặt mã này vào đầu chương trình của bạn.

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

Thật khó để đưa ra câu trả lời chính xác vì sao nhưng nó không thực sự là một hiện tượng kì lạ. Thông thường khi một VNC hoặc chia sẻ desktop từ xa xảy ra, các sự kiện bàn phím và chuột của một máy được truyền đến một máy khác. Khi bản đồ này được thực hiện, có thể có một cơ hội công bằng mà có thể có hành vi sai lầm đặc biệt là với bản sao clipboard, dán. Nó xảy ra không chỉ trong thế giới Linux mà còn trong thế giới cửa sổ.

Tôi nói điều này bằng kinh nghiệm của riêng mình. Tại nơi làm việc của chúng tôi, chúng tôi thường sử dụng các máy khác, một số chạy XP và một số chạy Windows 7. Hành động sao chép clipboard trên một máy và dán trên máy từ xa hoạt động trên một số hệ thống và không hoạt động trên các hệ thống khác.

Trích dẫn một trải nghiệm khác với quyền truy cập máy tính để bàn java và từ xa, tôi đã có một ứng dụng java chạy trên nhật thực của tôi. Khi tôi chuyển sang máy tính của tôi từ một số máy khác, tôi thấy rằng nhật thực hoàn toàn không thể khởi chạy ứng dụng. Đối với nó để làm việc, tôi cần phải khởi động nó trên hệ thống của riêng tôi đầu tiên, giữ cho các ứng dụng chạy và sau đó rdc từ một khác vào tôi.

Chỉ cần tưởng tượng, nếu đây là trường hợp với Windows XP và Windows 7 được biết đến thuộc cùng một họ. Người ta chỉ có thể hy vọng rằng một cái gì đó wacky như thế có thể không xảy ra khi sử dụng Linux và Windows cùng với VNC :)

Như đã nói, khó có thể nói chính xác là tại sao nó xảy ra hoàn toàn là một cái gì đó xảy ra ở hệ điều hành để cấp độ hệ điều hành và không phải ở cấp độ khung swing.

1

Tôi không chắc chắn, nhưng tôi chỉ cần trả lời trong một nỗ lực để giúp:

Kinh nghiệm của tôi với IcedTea là xấu. Tôi không thể nhớ chính xác những gì đã xảy ra, nhưng sau đó, cài đặt Java JRE chính thức đã giải quyết được các vấn đề của tôi. Id est: JRE do Oracle cung cấp.

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