双击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.out
和System.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=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文件将导致命令窗口弹出并保持不变。
您无法使用Open With...
或使用允许jar文件运行的Default Programs
来设置足够复杂的命令行。 如果你已经成功地尝试了所有这些努力ftype
和assoc
命令,但它仍然不起作用,那么你需要剥离注册表编辑器。
启动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文件,这应该工作。