2015-04-01 57 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