java - 帧缓冲区图像查看器 (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 应用程序中运行。
提前致谢
解决方案
很简单:“*”通配符(或任何其他通配符)是底层shell的一个特性。因此,当您在命令行上手动使用它时它可以工作。
但是当通过进程构建器使用它时,没有外壳。因此,没有将星号转换为文件名列表的组件。因此,该字符串作为文件名传递,当然,没有这样的文件!
您要么必须编写在代码中扩展通配符的 Java 代码(然后直接传递文件名列表),要么必须实际显式地启动一个 shell(正确地使用所有命令可能会非常棘手)。
推荐阅读
- javascript - 除了@click,我如何使用 v-on="$listeners"?
- r - R中的精确召回曲线
- kotlin - java.util.Iterator java.lang.Iterable.iterator() '关于一个空对象的引用我需要帮助理解
- r - R regmatches regexpr 想要排除分隔符
- python - 由于未加载渐变,微调 SavedModel 失败
- java - Project Euler #19,只有从 1900 年开始,答案才正确?
- debugging - 理解核心转储文件
- windows-10 - 如何在 git bas windows 10 上安装 automake、autoconf、libtool、pkg-config
- python - 在 tensorflows 功能 API 中以 (None,a,b) 形式引入张量
- python - 正则表达式匹配,直到找到除单词'and'之外的任何字符