[英]Why can't I access a file within my jar unless I'm in the folder with the Jar when I run it?
我最近創建了一個應用程序,並將其成功地添加到c:/my/folder/app.jar。 在以下情況下[啟動#1],它的工作原理像一種魅力:
但是當我這樣做時,它不起作用[啟動#2]:
因為app.jar包含一個.exe文件,我試圖在我的應用程序中運行它:
final Process p = Runtime.getRuntime().exec("rybka.exe");
由於找不到文件rybka.exe,因此無法在示例2中運行。
有什么建議么?
這樣的事情是更好的前進方式。 將exe從jar中復制到臨時位置,然后從那里運行它。 然后,您的jar也可以通過webstart等執行:
InputStream src = MyClass.class.getResource("rybka.exe").openStream();
File exeTempFile = File.createTempFile("rybka", ".exe");
FileOutputStream out = new FileOutputStream(exeTempFile);
byte[] temp = new byte[32768];
int rc;
while((rc = src.read(temp)) > 0)
out.write(temp, 0, rc);
src.close();
out.close();
exeTempFile.deleteOnExit();
Runtime.getRuntime().exec(exeTempFile.toString());
如果jar始終位於該目錄中,則可以使用完整路徑/my/folder/rybka.exe
。 如果不是,則可以使用getClass().getProtectionDomain().getCodeSource().getLocation()
來找出jar的位置,並將其放在rybka.exe
。
嘗試將exe解壓縮到
System.getProperty("java.io.tmpdir"));
然后從該位置運行它也應該每次都能工作。
保羅
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.