作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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 加载失败
。我以前见过此错误,但只有当我引用不存在的文件夹或文件时才会出现此错误。我尝试显示的图像位于桌面上。我可以从 CLI 中的任何位置运行调用 exec
中的相同命令,并且它可以工作。我不太确定为什么它在我的 Java 应用程序中不起作用。
提前致谢
最佳答案
简单:“*”通配符(或任何其他通配符)是底层 shell 的一项功能。因此,当您在命令行上手动使用它时,它就可以工作。
但是当通过进程构建器使用它时,没有 shell。因此,没有任何组件可以将星号转换为文件名列表。因此,该字符串作为文件名传递,当然,不存在这样的文件!
您要么必须编写 Java 代码来扩展代码中的通配符(然后直接传递文件名列表),要么必须实际显式启动 shell(正确执行所有命令可能会非常棘手) 。
关于java - 作为进程执行时帧缓冲区图像查看器 (FBI) 失败 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52069149/
我是一名优秀的程序员,十分优秀!