Tôi gặp sự cố với ứng dụng Swing, nhờ đó trọng tâm đôi khi sẽ nhận được trường nhập văn bản vì lý do tôi hiện không thể xác định. Tôi nghi ngờ một điều kiện chủng tộc của một số loại nhưng tôi không thể nhìn thấy những gì đang gây ra sự kiện tập trung.Xác định nguồn gốc của yêu cầu lấy nét trong Giao diện người dùng Java Swing
Trường này có trình nghe tập trung gắn liền với nó để nó thẳng về phía trước để thêm điểm ngắt cho trình xử lý sự kiện focusGained(). Khi tôi làm vậy, tôi có thể thấy sự kiện cơ bản mà lần lượt chứa một thể hiện của CausedFocusEvent.Cause. Trường tên được đặt thành "ACTIVATION".
Nhìn vào vết đống, tôi có thể thấy như sau:
Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 174 in MyPanel$3))
MyPanel$3.focusGained(FocusEvent) line: 174
AWTEventMulticaster.focusGained(FocusEvent) line: not available
InputField(Component).processFocusEvent(FocusEvent) line: not available
InputField(Component).processEvent(AWTEvent) line: not available
InputField(Container).processEvent(AWTEvent) line: not available
InputField(Component).dispatchEventImpl(AWTEvent) line: not available
InputField(Container).dispatchEventImpl(AWTEvent) line: not available
InputField(Component).dispatchEvent(AWTEvent) line: not available
DefaultKeyboardFocusManager(KeyboardFocusManager).redispatchEvent(Component, AWTEvent) line: not available
DefaultKeyboardFocusManager.typeAheadAssertions(Component, AWTEvent) line: not available
DefaultKeyboardFocusManager.dispatchEvent(AWTEvent) line: not available
InputField(Component).dispatchEventImpl(AWTEvent) line: not available
InputField(Container).dispatchEventImpl(AWTEvent) line: not available
InputField(Component).dispatchEvent(AWTEvent) line: not available
SunToolkit$1.run() line: not available
PeerEvent(InvocationEvent).dispatch() line: not available
EventQueue.dispatchEventImpl(AWTEvent, Object) line: not available
EventQueue.access$200(EventQueue, AWTEvent, Object) line: not available
EventQueue$3.run() line: not available
EventQueue$3.run() line: not available
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: not available
EventQueue.dispatchEvent(AWTEvent) line: not available
EventDispatchThread.pumpOneEventForFilters(int) line: not available
EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: not available
EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: not available
EventDispatchThread.pumpEvents(int, Conditional) line: not available
EventDispatchThread.pumpEvents(Conditional) line: not available
EventDispatchThread.run() line: not available
Lưu ý rằng InputField là một lớp con của JTextField rằng với những thay đổi nhỏ liên quan đến vẽ của văn bản.
Tất cả những gì tôi có thể biết từ dấu vết ngăn xếp là một cái gì đó trên EDT đã gây ra InputField trong MyPanel để lấy tiêu điểm.
Có bất kỳ thông tin nào khác mà tôi có thể nhận được hay không sẽ cho tôi khả năng hiển thị về lý do thành phần này đạt được bởi thành phần này?
Không nên có bất kỳ điều kiện chủng tộc nào vì tất cả các sự kiện Swing phải được thực hiện trên một chuỗi duy nhất, EDT. Xem xét cố gắng tách biệt mã gây ra sự cố bằng cách cắt mã cho đến khi sự cố biến mất và do đó cố gắng tìm mã tối thiểu tái tạo sự cố và sau đó đăng nó ở đây. Tò mò: bạn đang sử dụng FocusListener làm gì? –
Tôi đồng ý về chủ đề duy nhất nhưng mối quan tâm của tôi là swing có thể thực hiện hiển thị bên dưới theo thứ tự không xác định và điều gì đó vô tình phụ thuộc vào thứ tự đó. Trình nghe tập trung chủ yếu chỉ để gỡ lỗi, nó không có bất kỳ ảnh hưởng nào khi lấy nét, nó chỉ phản ứng với nó. – PhilDin
'là một cái gì đó trên EDT gây ra InputField trong MyPanel để đạt được focus.' xin vui lòng gây ra từ ???, để được trợ giúp tốt hơn sớm hơn đăng một SSCCE, ngắn, runnable, compilable, gây ra vấn đề với focusGained từ InputField chuyển hướng bởi ngoại lệ JVM MyPanel – mKorbel