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

Java 双击JAR文件不会打开命令提示符,java,jar,executable-jar,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!"); B

我想双击一个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();
}
}
并且清单文件定义了主类

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

但是,如果我直接双击Jar文件,什么也不会发生。 我还检查了链接并将我的.jar关联到javaw.exe 林克也提出了同样的建议。 还尝试将.jar与java.exe关联

发生的情况是,命令提示符打开几秒钟后消失

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


问题出在哪里?

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

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

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

如果您使用了简单的
openwith…
选项,它将从命令行中省略
-jar
选项

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

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

当您在下面双击时,它应该会正确运行

您可以添加另一个ftype:

ftype jarfile="C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*
再次用系统的路径替换javaw二进制文件的路径

您现在应该能够通过交替选择
assoc.jar=jarfileterm
assoc.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文件将导致弹出一个命令窗口并保持

您不能使用
openwith…
或使用允许jar文件运行的
默认程序来设置足够复杂的命令行。如果您已经成功地尝试了所有这些操作
ftype
assoc
命令,但仍然不起作用,那么您需要剥离注册表编辑器

启动
regedit
,并在
HKEY_CLASSES\u ROOT
下搜索名为.jar的键-这将在其下生成一个名为
(默认值)
的值,如果ftype命令调用有效,则应读取
jarfileterm
。如果它不起作用,那么您将看到一个可能由另一个应用程序创建的关联(我不知道java更新程序是否替换了这些条目,但如果替换了,那么这可能就是问题所在)


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

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

  • 打开regedit→ HKEY\U CLASSES\U ROOT\jarfile\shell\open\command
  • 将默认值从
    javaw
    更改为
    java

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

    ,当您将.jar与javaw关联时,它故意不显示命令窗口!!将其与java关联,您应该会看到window@Petesh你能把这句话作为回答吗?我相信你会得到回报的。我确实与java.exe有关联。但是,该窗口仅显示了几分之一秒。请将更新后的POSI关联jar引用到jre/bin中的java.exe。但是,这确实会打开命令提示符一秒钟,然后消失。我期待使用BufferedReader的用户输入。因此,它应该等待一些用户输入,然后像那样消失。如果您使用简单的“openwith…”选项,那么-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”%*“
    然后双击jar文件-如果调用有任何错误,它们将保留在终端窗口中
    ftype jarfileterm=cmd /s /k ""C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*"
    assoc .jar=jarfileterm