1

我最近创建了一个应用程序并成功地将其 jarred 到 c:/my/folder/app.jar。在以下情况 [Startup #1] 中,它就像一个魅力:

  • 打开命令
  • cd 到 c:/我的/文件夹
  • java -jar app.jar

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

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

因为 app.jar 包含我尝试在我的应用程序中运行的 .exe 文件:

final Process p = Runtime.getRuntime().exec("rybka.exe");

它在示例 2 中不起作用,因为它找不到文件 rybka.exe。

有什么建议么?

4

3 回答 3

4

像这样的事情是一个更好的前进方式。将 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());
于 2009-08-09T11:48:02.987 回答
1

如果 jar 将始终位于该目录中,则可以使用完整路径/my/folder/rybka.exe。如果没有,您可以使用getClass().getProtectionDomain().getCodeSource().getLocation()找出 jar 的位置并将其添加到rybka.exe.

于 2009-08-09T09:52:41.050 回答
1

尝试将exe提取到

System.getProperty("java.io.tmpdir"));

然后从这个位置运行它也应该每次都可以工作。

保罗

于 2009-08-09T11:36:54.567 回答