2015-04-01 26 views
0

我有一个jar文件,我想从bash脚本启动。该jar包含对包含图像的外部文件夹的引用。包含外部文件的Bash脚本运行jar不起作用

当我从jar命令行运行jar的绝对路径时,所有工作正常。当我从bash脚本运行它时出现问题。显然,找不到包含图像的文件夹。

从命令行启动:

java -Djava.library.path=/opt/opencv/build/lib -Xmx1g -jar /home/version4/Podo.jar 

bash脚本:

#! /bin/bash -x 
cmd="java -Djava.library.path=/opt/opencv/build/lib -Xmx1g -jar /home/version4/Podo.jar" 
eval $cmd 

哪里是我的图片是该目录是: /家/版本4/IMG

的Java代码访问图像:

String img_header="./img/HEADER.png"; 
String img_body="./img/BODY.png"; 
BufferedImage header,body; 
header=ImageIO.read(new File(img_header)); 
body=ImageIO.read(new File(img_body)); 

输出错误:

javax.imageio.IIOException: Can't read input file! 
    at javax.imageio.ImageIO.read(ImageIO.java:1301) 

谁能告诉我什么,我做错了什么?谢谢。

+0

为什么你在这里使用'eval'而不是运行命令? – 2015-04-01 09:48:42

+0

即使我正在运行只有命令是一样的;我第一次这样做,比我读的是我最好使用eval:| – 2015-04-01 09:50:17

+0

好吧,那么你用'-x'运行脚本,它应该输出运行命令。那么输出是什么? – 2015-04-01 09:51:24

回答

0

您应该在运行jar文件时从同一目录运行您的bash脚本。尽管如此,它可以位于另一个地方,唯一的含义是你的工作目录。更好的方法是将图像存储在jar中,请参阅Getting a BufferedImage as a resource so it will work in JAR file

无论如何,您不应该使用绝对路径来检索图像,因为此解决方案只会破坏jar的任何可移植性。

+0

谢谢!问题是我无法将jar文件保存在内部,因为它们会被用户不时地替换,并且必须完成更新映像的过程。因此,用户必须有权访问此图像... – 2015-04-01 10:16:51

+0

然后,您可以使用一些设置,哪些用户可以更改。 – 2015-04-01 10:19:50

+0

是的,就像一个XML文件,我的图像的路径在哪里。 – 2015-04-01 10:20:53

0

如果您正在从jar位置以外的位置运行bash脚本,请尝试给出图像的绝对路径(在您的java代码中)。

+0

非常感谢! – 2015-04-01 10:19:42