【问题标题】:Double Clicking JAR file does not open Command Prompt双击 JAR 文件不会打开命令提示符
【发布时间】:2012-05-13 21:20:36
【问题描述】:

我想通过双击运行一个 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。

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

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

命令提示符会打开几分之一秒然后消失。

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

问题出在哪里?

【问题讨论】:

  • 当您将 .jar 关联到 javaw 时,它故意不显示命令窗口!将它与 java 关联,您应该会看到窗口
  • @Petesh 您可以添加此评论作为答案吗?我相信你会得到回报的。
  • 我确实与 java.exe 相关联。但是,该窗口仅显示几分之一秒。请参考更新后的帖子

标签: java jar executable-jar


【解决方案1】:

当您使用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 后保留命令窗口,则在调用 java 命令时加上 cmd /s /k 即:

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

如果这些命令有效,则双击 jar 文件会弹出一个命令窗口并持续存在。

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

启动regedit,并在HKEY_CLASSES_ROOT 下搜索一个名为.jar 的键 - 这应该会在它下面产生一个名为(Default) 的单个值,如果你的ftype 命令调用有效,那么它应该读取@ 987654342@。如果它不起作用,那么您正在查看可能已由另一个应用程序创建的关联(我不知道 java 更新程序是否替换了这些条目,但如果确实如此,那么这可能是问题)

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

【讨论】:

  • 我将 jar 关联到 jre/bin 中的 java.exe。但是,这确实会打开命令提示符一秒钟然后消失。我期待使用 BufferedReader 的用户输入。所以它应该在像那样消失之前等待一些用户输入。
  • 如果您使用简单的“打开方式...”选项,则 -jar 选项将丢失,从而导致您遇到问题。我将使用一组可从命令行正确配置的选项来更新答案
  • 感谢您更新答案。我遵循解决方案设置 jarfileterm 和 jarfile。将 .jar 关联到 jarfileterm。但是,此解决方案不起作用:(同样的问题仍然存在。命令提示符仅显示几分之一秒。
  • 当您将相当于调用 jarfileterm 操作的内容复制到终端窗口时:"c:\program files\java\jre7\bin\java.exe" -jar "c:\users\my account\documents\myjar.jar" 是否运行正确?
  • 执行ftype jarfileterm=cmd /s /k ""C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*",然后是assoc .jar=jarfileterm,然后双击jar文件-如果调用有任何错误,它们将保留在终端窗口中
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我正在使用 JDK 在 Windows 10 中打开 jar 文件。

    1. 打开注册表→HKEY_CLASSES_ROOT\jarfile\shell\open\command
    2. 将默认值从javaw 更改为java

    例如,我的是"C:\Program Files\Java\jdk-14.0.1\bin\java.exe" "-jar" "%1"

    【讨论】:

      猜你喜欢
      • 2014-12-16
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 2018-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多