我正在编写一个GUI应用程序,该应用程序使用Raspbian中的gphoto2包从相机拍摄图像。当我手动在终端中输入命令gphoto2 --capture-image-and-download
时,相机会拍摄图像并将其保存到当前文件夹中。然而,当我通过Java代码中的按钮执行相同的命令时,相机会拍摄图像,但不会保存。bash的重定向输出显示图像保存到相机(我可以处理),但图像既没有保存到相机也没有保存到当前目录,事实上,它看起来根本没有保存。
这是按钮代码:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Runtime com = getRuntime();
try {
//Reset USB Device to prevent warnings
Process mand = com.exec("../../../usbreset /dev/bus/usb/001/005");
//Capture image
Process get = com.exec("gphoto2 --capture-image-and-download");
Send Bash output(s) to text area
BufferedReader in1 = new BufferedReader(new InputStreamReader(mand.getInputStream()));
BufferedReader in2 = new BufferedReader(new InputStreamReader(get.getInputStream()));
String inputLine1;
while ((inputLine1 = in1.readLine()) != null) {
msgArea.append(inputLine1 + "n");
}
in1.close();
String inputLine2;
while ((inputLine2 = in2.readLine()) != null) {
msgArea.append(inputLine2 + "n");
}
in2.close();
} catch (IOException ex) {
Logger.getLogger(Home.class.getName()).log(Level.SEVERE, null, ex);
}
}
我不知道问题是出在我的bash命令还是Java代码中。我在相机中有卡和没有卡的情况下都尝试过,也尝试过为图像指定文件名,但都无济于事。我不确定这是否重要,但Pi是通过PuTTY ssh控制的,X11在Debian笔记本电脑上转发。Java是用Netbeans 8编写的。GPhoto2是2.4.14版本,相机是佳能EOS1100D,尽管我怀疑最后一个事实超出了要求。
如果有人能帮忙,我将不胜感激——这是我大学最后一年项目的重要组成部分,所以我必须尽快解决!
提前感谢
Guy
好的,我已经回答了我自己的问题。
bash的输出只发送到图片拍摄时为止。在那之后,终端输出没有被发送,所以我错过了一个错误,一个Permission Denied jobbie。因此,解决方案只是在gphoto2
命令之前添加一个sudo
。简单的解决方案最终却令人沮丧!