Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包含外部文件的Bash脚本运行jar不起作用_Java_Linux_Bash_Jar - Fatal编程技术网

Java 包含外部文件的Bash脚本运行jar不起作用

Java 包含外部文件的Bash脚本运行jar不起作用,java,linux,bash,jar,Java,Linux,Bash,Jar,我有一个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.p

我有一个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)

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

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

您应该在运行jar文件的同一目录下运行bash脚本。尽管如此,它仍然可以位于另一个地方,唯一有意义的细节是您的工作目录。更好的方法是将图像存储在jar中,请参见


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

为什么在这里使用
eval
,而不只是运行命令?即使我只运行相同的命令;我第一次这样做时,我读到最好使用eval:|好的,然后用
-x
运行脚本,它应该输出正在运行的命令。那么输出是什么?如何检索图像?给我们看代码。它是图像的目录吗?应用程序是将其称为绝对路径还是相对路径?谢谢!问题是我不能将图像存储在jar中,因为用户会不时地替换它们,并且必须完成更新图像的过程。因此,用户必须能够访问这些图像…然后您可以使用一些设置,用户可以更改这些设置。是的,比如XML文件,其中是我的图像的路径。