Java11树莓派3B+直接写帧缓冲区时如何消除无关闪烁光标?
消除树莓派帧缓冲区绘制时的闪烁光标方案
试试这几个办法解决闪烁光标问题:
直接禁用控制台光标
树莓派的帧缓冲和控制台光标绑定在一起,直接通过系统命令关闭光标闪烁:echo 0 > /sys/class/graphics/fbcon/cursor_blink在Java代码里可以通过系统调用执行这个命令:
try { Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", "echo 0 > /sys/class/graphics/fbcon/cursor_blink"}); } catch (IOException e) { e.printStackTrace(); }这个方法是全局生效的,重启树莓派后会恢复默认状态,要是想永久生效,可以把这条命令加到
/etc/rc.local里。修改JavaFrameBuffer的JNI代码
既然用的是JNI直接操作帧缓冲,那可以在底层初始化时调用Linux的ioctl命令关闭光标。找到JNI里初始化帧缓冲的代码段,添加类似下面的逻辑:#include <linux/fb.h> #include <sys/ioctl.h> // 假设fb_fd是已经打开的帧缓冲文件描述符 struct fb_cursor cursor; memset(&cursor, 0, sizeof(cursor)); cursor.enable = 0; ioctl(fb_fd, FBIO_CURSOR, &cursor);重新编译JNI库后,应用启动时就会自动关闭光标,不会影响其他程序,是最彻底的应用级解决方案。
绘制时覆盖光标区域
如果不想改系统设置或JNI代码,每次绘制文本后,找到光标所在的位置(通常是文本末尾),用背景色重新绘制该区域,把光标覆盖掉。不过这个方法需要跟踪光标位置,而且频繁刷新可能会有轻微性能损耗,适合小屏幕场景。
内容的提问来源于stack exchange,提问作者sodastream
相关产品推荐
相关产品推荐

