6

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

发生的情况是命令提示符打开了几分之一秒然后消失了。

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

问题出在哪里?

4

3 回答 3

12

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

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

如果您使用 simpleOpen 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 /kviz:

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,并在下面搜索一个名为 .jar 的键HKEY_CLASSES_ROOT- 这应该会导致它下面的单个值调用(Default)一个值,如果您的 ftype 命令调用有效,那么它应该读取jarfileterm. 如果它不起作用,那么您正在查看可能已由另一个应用程序创建的关联(我不知道 java 更新程序是否替换了这些条目,但如果确实如此,那么这可能是问题所在)

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

于 2012-05-04T10:35:50.710 回答
1

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

于 2012-05-04T10:33:52.907 回答
0

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

  1. 打开 regedit → HKEY_CLASSES_ROOT\jarfile\shell\open\command
  2. 将默认值从 更改javawjava

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

于 2020-08-11T10:38:33.947 回答