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

whi*_*hat 6 java jar executable-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();
}
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

问题出在哪儿?

Pet*_*esh 13

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

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

如果您使用了simple Open With...选项,它将-jar从命令行中省略该选项.

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

assoc .jar=jarfileterm
ftype jarfileterm="C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*
Run Code Online (Sandbox Code Playgroud)

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

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

您可以添加另一个ftype:

ftype jarfile="C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*
Run Code Online (Sandbox Code Playgroud)

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

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

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

ftype jarfileterm=cmd /s /k ""C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*"
assoc .jar=jarfileterm
Run Code Online (Sandbox Code Playgroud)

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

您无法使用任何一个Open With...或使用Default Programs它来设置足够复杂的命令行以允许运行jar文件.如果您已成功尝试了所有这些工作ftypeassoc命令,但它仍然无效,那么您将需要剥离注册表编辑器.

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

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


RP-*_*RP- 1

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