按住键时,Swing 中的文本输入字段在 OS X 上停止工作

Posted

技术标签:

【中文标题】按住键时,Swing 中的文本输入字段在 OS X 上停止工作【英文标题】:Text input fields in Swing stop working on OS X when holding keys down 【发布时间】:2015-11-15 21:09:59 【问题描述】:

我发现 OS X Yosemite 上的 Swing 文本输入字段存在一个奇怪的问题(使用 Oracle JDK 8)。当我在文本输入字段获得焦点时按住任何字母或数字键时,之后我将无法再在当前 JFrame 的任何字段中输入任何内容。然后我必须关闭框架并重新打开它才能再次输入文本。

OS X 中的默认行为是在长时间按住某个键时调出一个小菜单以从中选择特殊字母。我猜 Swing 输入确实有问题。

其他人是否也注意到了这一点,是否有解决此问题的方法?

编辑:我了解到可以通过将标志 ApplePressAndHoldEnabled 设置为 false 来禁用字符重音菜单。

defaults write -g ApplePressAndHoldEnabled -bool false

但是,我想在 Java 中以编程方式解决这个问题,以便文本输入字段也适用于使用我的软件的其他人。

谢谢

【问题讨论】:

寻求调试帮助的问题(“为什么这段代码不工作?”)必须包括所需的行为、特定的问题或错误以及必要的最短代码在问题本身中重现它。 没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建minimal reproducible example 【参考方案1】:

这似乎是 OS X 本身的问题。重新启动我的 Mac 后,问题现在消失了。

【讨论】:

【参考方案2】:

我已经有这个确切的问题很长一段时间了。我很沮丧,突然我的 JFrame 中的所有输入文本字段都会停止工作。直到今天我才发现它与苹果的重音字符弹出窗口有关。对我来说,这个问题只发生在我长按具有相关重音字符的键之一(例如:a、c、e、u、n、...)而框架中的焦点位于不具有重音符号的组件上时'没有文本输入(例如按钮或面板)。 仍在寻找适当的解决方案以在程序本身中以编程方式修复它,但这是我偶然发现的一种解决方法:

每当问题发生并且键停止工作时,我首先单击框架中的任何“文本字段”以使其聚焦,然后按住其中任何一个带有重音弹出的键(例如“a”键),直到弹出式节目。然后我只是点击了escape,然后所有的键都重新开始工作。

奇怪的是,一旦我经历过一次,该问题就不会在该框架上再次发生,直到下一次关闭和打开框架。

【讨论】:

以上是关于按住键时,Swing 中的文本输入字段在 OS X 上停止工作的主要内容,如果未能解决你的问题,请参考以下文章

按下返回键时如何通过多个文本字段输入进行选项卡?

当用户在文本字段中快速输入键时如何显示键的值

事件类型--键盘与文本事件

玩家精灵在按住移动键时移动而无需输入

Java,Swing,获取和更改所有输入字段

Scala Swing:验证文本字段的整数输入