首页 > 解决方案 > CentOS 屏幕键盘未显示 Jawa Swing 文本输入字段

问题描述

我们有一个 Java swing 应用程序,其文本字段在 CentOS 上运行,在没有物理键盘的触摸板上。在 CentOS 中,在通用访问下,我们可以打开屏幕键盘,只要任何应用程序上有文本输入,它就会出现。当我们使用终端或 GEdit 或类似应用程序时,这非常有效。但是当我们使用 Java Swing 应用程序时,操作系统似乎不理解有一个文本输入字段并且没有调出键盘。

有一个选项可以让键盘始终打开,尽管它解决了问题,但它不适合我们的应用程序。键盘应仅在有文本输入时按需出现。像佛罗伦萨这样的第三方键盘也不能满足客户的要求。

有没有办法强制通过代码以编程方式在 CentOS 的屏幕键盘上调出 Caribou?(在 Ubuntu 16.04 中,可以通过调用命令“onboard”调出屏幕键盘“Onboard”)

更新:解决方案不需要专门通过 Java。即使它是命令或 shell 脚本,我也可以使用 Java 中的 Processbuilder 来调用它。

标签: javaswingkeyboardcentosgnome

解决方案


在 CentOS 7 (GNOME) 中,屏幕键盘作为名为“Caribou”的服务运行。它侦听 dbus 消息以自动显示/隐藏。通过发送适当的 dbus 信号,我们可以强制显示/隐藏屏幕键盘。因此,当获得焦点时(对于 Java Swing 控件),dbus 信号被发送到程序内部以显示/隐藏 CentOS 7 中的屏幕键盘。

可以尝试这些终端命令来模拟这个

dbus-send --type=method_call --dest=org.gnome.Caribou.Keyboard /org/gnome/Caribou/Keyboard org.gnome.Caribou.Keyboard.Show uint32:0
dbus-send --type=method_call --dest=org.gnome.Caribou.Keyboard /org/gnome/Caribou/Keyboard org.gnome.Caribou.Keyboard.Hide uint32:0

还有一个用于发送 dbus 消息的 java 库。 https://dbus.freedesktop.org/doc/dbus-java/dbus-java/

但是 CentOS 7.5 中似乎缺少 Caribou dbus 接口的显示/隐藏接口

在 CentOS 7(KDE) 中,可以将键盘小部件添加到任务栏,并且可以分配快捷键以显示/隐藏屏幕键盘。从 java 程序中,可以模拟这个快捷键来显示/隐藏屏幕键盘。


推荐阅读