Swing アプリケーションに問題があり、現在特定できない理由により、テキスト入力フィールドによってフォーカスが取得されることがあります。ある種の競合状態が疑われますが、フォーカス イベントの原因がわかりません。
このフィールドにはフォーカス リスナーがアタッチされているため、簡単に focusGained() イベント ハンドラーにブレークポイントを追加できます。そうすると、CausedFocusEvent.Cause のインスタンスを含む基になるイベントを確認できます。名前フィールドは「ACTIVATION」に設定されています。
スタック トレースを見ると、次のことがわかります。
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
InputField は JTextField のサブクラスであり、テキストのレンダリングに関連する小さな変更があることに注意してください。
スタック トレースからわかるのは、EDT の何かが原因で MyPanel の InputField がフォーカスされたということだけです。
このコンポーネントが注目を集めた理由を明らかにするために、他に入手できる情報はありますか?