java - CentOS 屏幕键盘未显示 Java Swing 文本输入字段

标签 java swing keyboard centos gnome

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

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

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

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

最佳答案

在 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 接口(interface)的显示/隐藏接口(interface)

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

关于java - CentOS 屏幕键盘未显示 Java Swing 文本输入字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51434141/

相关文章:

java - 从没有 array.copy 的数组中删除负元素

java - 使用 .db 文件填充 JTable

java - Java程序在Windows上运行时不显示Unicode字符

keyboard - 从数字键盘上的自定义 'Done' 按钮接收通知在 iOS 8.3 中不起作用

python - 从 Python 将按键插入 Linux 控制台

Java对象移动

java - 具有自定义状态代码的 Spring Boot Controller ?

java - 解析数据 org.json.JSONException 时出错,已经尝试其他帖子

java - CheckStyle 检查未被忽略

java - 当我们选择“刷新”选项时,JFileChooser中的“修改日期”字段不会更新