我正在尝试使用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
。我以前曾见过此错误,但仅当我引用不存在的文件夹或文件时才见过。我尝试显示的图像位于桌面上。我可以从CLI的任何位置运行对exec
的调用中的同一命令,它可以正常工作。我不确定为什么它不能在Java应用程序中正常工作。
预先感谢
答案 0 :(得分:1)
简单:“ *”通配符(或任何其他通配符)是基础 shell 的功能。因此,当您在命令行上手动使用它时,它将起作用。
但是,通过流程生成器使用它时,没有外壳。因此,没有可以将星号变成文件名列表的组件。因此,该字符串将作为文件名传递,当然,没有这样的文件!
您要么必须编写Java代码以在代码中扩展通配符(然后才能直接传递文件名列表),要么必须真正地显式启动Shell(使用所有命令正确理解这一点可能很棘手) 。