java - CentOS 屏幕键盘未显示 Jawa Swing 文本输入字段
问题描述
我们有一个 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 接口的显示/隐藏接口
在 CentOS 7(KDE) 中,可以将键盘小部件添加到任务栏,并且可以分配快捷键以显示/隐藏屏幕键盘。从 java 程序中,可以模拟这个快捷键来显示/隐藏屏幕键盘。
推荐阅读
- python - Python:使用 groupby() 和 apply() 对聚集数据中的日期时间进行排序
- c# - Blazor - 在一个解决方案中重定向到另一个项目中的页面(我的意思是在一个项目空间中)
- amazon-dynamodb - AWS Java SDK - 如何通过 AppSync 连接 dynamodb
- multithreading - Go 调度器什么时候会创建一个新的 M 和 P?
- php - 在 PHP 中调用 run multirequest 需要什么类型的配置?
- javascript - Material UI 图标给出错误:无效的挂钩调用。Hooks 只能在函数组件的主体内部调用
- python - 为什么缩放在我的折线图中无法在 Dash 中工作
- python - 如何在运行时使用 pyinstaller 创建的 .exe 从唯一的 .txt 文件中访问数据
- linux - 我们如何为 riscv-linux 交叉编译静态链接的 rust 程序?
- python - 拆分为列