繁体   English   中英

为何运行该文件时,除非我在Jar所在的文件夹中,否则为什么我无法访问其文件?

[英]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],它的工作原理像一种魅力:

  • 打开cmd
  • cd到c:/ my / folder
  • java -jar app.jar

但是当我这样做时,它不起作用[启动#2]:

  • 打开cmd
  • cd到c:/ my /
  • java -jar文件夹/app.jar

因为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM