双击JAR文件不会打开命令提示符

我想通过双击运行Jar文件。

以下是其中唯一存在的Java类文件。

import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Sysout{ public static void main(String[] args) throws IOException{ System.out.println("Hello World!"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String msg = br.readLine(); System.out.println(msg); br.read(); } } 

并且Manifest文件已定义Main-Class。

使用此链接,我通过双击批处理文件成功运行了Jar文件。 这将打开命令提示符并运行定义的主类。

但是,如果我直接双击Jar文件,则没有任何反应。 我还检查了这个链接并将我的.jar与javaw.exe相关联。 此链接也提示相同。 还尝试将.jar与java.exe相关联

发生的事情是命令提示符打开几分之一秒并消失。

即使我希望用户输入一些数据,双击操作也不会等待用户输入任何内容。

哪里有问题?

当您使用javaw关联时,它不会创建命令窗口,并吞下所有System.outSystem.err调用。

您应该将.jar文件与java二进制文件重新关联,后者应显示必需的命令窗口。

如果您使用简单的Open With...选项,它将从命令行中省略-jar选项。

打开管理员命令窗口(如果您使用的是启用了UAC的Vista或Windows 7,则需要这样做)并执行以下操作:

 assoc .jar=jarfileterm ftype jarfileterm="C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %* 

在您的情况下,您应该将C:\Program Files\Java\jre7\bin\java.exe路径替换为安装jre的路径。

双击此后,它应该正确运行。

您可以添加另一个ftype:

 ftype jarfile="C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %* 

再次使用适合您系统的路径替换javaw二进制文件的路径。

您现在应该可以通过交替选择assoc .jar=jarfiletermassoc .jar=jarfile在窗口和非窗口之间切换。

如果你想在运行.jar之后保持命令窗口,那么你用cmd /s /k viz包围调用java命令:

 ftype jarfileterm=cmd /s /k ""C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*" assoc .jar=jarfileterm 

如果这些命令有效,那么双击jar文件将导致命令窗口弹出并保持不变。

您无法使用Open With...或使用允许jar文件运行的Default Programs来设置足够复杂的命令行。 如果你已经成功地尝试了所有这些努力ftypeassoc命令,但它仍然不起作用,那么你需要剥离注册表编辑器。

启动regedit ,并在HKEY_CLASSES_ROOT下搜索一个名为.jar的键 – 这应该导致它下面的一个值(Default)带有一个值,如果你的ftype命令调用工作,那么它应该读取jarfileterm 。 如果它不起作用,那么你正在查看一个可能由另一个应用程序创建的关联(我不知道java updater是否替换了这些条目,但如果有,那么这可能是问题)

您需要在HKEY_CLASSES_ROOT查找此键。 它会找到这个条目,它应该包含一个密钥Shell (即展开文件夹jarfileterm ,它应该显示另一个文件夹Shell ),其中包含一个包含一个键的Command Open ,其中包含一个应该包含调用的(Default)值用于启动.jar文件的命令。 此命令应与您输入的最后一个ftype jarfileterm=...条目匹配。如果没有,则应使其与cmd /s /k或“c:\ program files \ java \ jre7 \ bin”中的一个匹配\ java.exe“选项(取决于是否要在启动时出现错误时保留命令窗口)

可能是您的.jar文件已与任何其他默认程序绑定,右键单击并使用“Java(TM)Platform SE binary”打开。 如果有可执行jar文件,这应该工作。