从命令行启动Java应用程序可以工作,但从批处理文件中无法启动。

6
问题如下: 我有一个打包在“.jar”文件中的Java应用程序。
我可以通过以下两种方式启动该程序(Swing应用程序):
  • 双击jar文件
  • 命令行java -jar MyApp.jar
然而,当我将命令行命令放入批处理文件中时,它会告诉我:

无法访问jar文件MyApp.jar

批处理文件与jar文件在同一目录中。就像我从cmd-line启动的那样。 我尝试使用管理员权限和管理员shell调用bat,但没有效果。
我在Windows 7(64位)机器上工作。感谢任何提示。
编辑
你要求我提供内容 :) 这是批处理文件:
@ECHO OFF
java -jar MyApp.jar
@PAUSE

编辑2

双击批处理文件和从命令行中执行批处理文件具有相同的效果。 将命令更改为:

java -jar "C:\Full\Path\MyApp.jar"

没有任何影响。

编辑3

我在批处理文件中添加了SET Path=%Path%;C:\Path\To\Jar,但是没有任何效果。 我也尝试使用Chris链接和Viruzzo支持的双斜杠。同样没有影响。


2
你能发布一下批处理文件吗? - Sibster
这可能是一个无知的建议,但你是否对相关文件进行了chmod ###操作?编辑:“chmod等效命令”,我今天还在处理我的第一杯咖啡,谢谢@Viruzzo。 - Chris
@Chris chmod on Windows? - Viruzzo
@Chris:就像我写的那样,尝试调整权限并没有成功。我猜想这可能与路径有关。除了类路径、路径和工作目录,我真的想不到其他的了... - Fildor
如果您在批处理文件上设置了XP兼容模式并在资源管理器上执行它,会发生什么? - kingori
显示剩余3条评论
5个回答

3

当您双击 .bat 文件时,工作目录并不是设置在 .bat 文件所在的位置,而通常是类似于 %AppData% 的某个地方。为了使其正常工作,您需要将文件的完整路径放入 bat 中(例如:java -jar C:\path\to\jar\MyApp.jar)。


尝试将文件移动到最简单的目录中(例如C:或其下的新目录),然后重试。特定路径可能会出现问题。 - Viruzzo
移动到 C:\test\ 并相应更改命令。没有效果 :( - Fildor
线程中@Chris链接的一条评论指出,您可能必须在路径中使用双斜杠。 - Viruzzo
这不是一个非常便携的解决方案。 - Tomáš Zato

2

即使路径中没有空格或奇怪的字符,我也必须将路径用引号括起来。

java -jar C:\Users\Jacob\executables\some-file.jar 失败了,但是

java -jar "C:\Users\JStamm\executables\some-file.jar" 成功了。


奇怪的是,单引号不起作用。使用双引号一切都运行得很完美! - phylib

1
这不是针对你具体问题的答案,但它能帮助你排除故障并找到答案。添加一个sleep命令可以让命令提示符保持静止,以便它不会立即关闭。
ping 1.1.1.1 -n 1 -w 10000

(睡眠10秒钟)

0

请确保您的Windows系统中未启用隐藏扩展名选项。也许您的jar文件名以.jar.jar结尾?您确定jar文件路径正确吗?


1
这是我拿到新电脑时做的第一件事情 :) - Fildor
你可以尝试在执行 java -jar MyApp.jar 命令之前添加 cd C:\path\to\jar。 - ppalasek

0

我还没有弄清楚为什么,但现在它可以工作了:

第一个批处理文件是另一个文件的副本,我只是更改了内容以适应我的需求。

现在我将其重命名为MyApp.bak,并从头编写了一个新的MyApp.bat。

一旦我找到了区别所在,我会更新这个答案。

更新

另一个批处理文件也出现了同样的问题。这次,我们找到了原因:由于某种原因,在复制时批处理文件没有继承权限。在文件夹中创建一个新文件可以获得正确的权限。因此,最终确实是权限问题。


很遗憾,我想我也没有时间进一步调查了。 - Fildor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接