首页 > 解决方案 > 帧缓冲区图像查看器 (FBI) 在作为进程执行时失败 - Java

问题描述

我正在尝试使用 Linux FBI 实用程序从 Java 将一些 .jpg 图像写入 Raspberry Pi 3 上的帧缓冲区。

从命令行一切都按预期工作。我的 java 应用程序运行良好,直到我尝试运行以下代码行(顺便说一下,没有 Java 错误):

Process p = Runtime.getRuntime().exec("sudo fbi -T 1 -d /dev/fb0 -a -noverbose -t 1 -cachemem 0 /home/pi/Desktop/*.jpg");

执行此过程时确实会显示 FBI 的黑色加载屏幕,因此我知道它正在正确执行,但 FBI 以错误状态响应/home/pi/Desktop/*.jpg Loading Failed。我以前见过这个错误,但只有当我引用一个不存在的文件夹或文件时。我试图显示的图像在桌面上。我可以exec从 CLI 中的任何位置运行与调用相同的命令,并且它可以工作。我不确定为什么它不能在我的 Java 应用程序中运行。

提前致谢

标签: javaraspberry-piraspberry-pi3

解决方案


很简单:“*”通配符(或任何其他通配符)是底层shell的一个特性。因此,当您在命令行上手动使用它时它可以工作。

但是当通过进程构建器使用它时,没有外壳。因此,没有将星号转换为文件名列表的组件。因此,该字符串作为文件名传递,当然,没有这样的文件!

您要么必须编写在代码中扩展通配符的 Java 代码(然后直接传递文件名列表),要么必须实际显式地启动一个 shell(正确地使用所有命令可能会非常棘手)。


推荐阅读