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.out
和System.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 /k
viz 包围调用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文件.如果您已成功尝试了所有这些工作ftype
和assoc
命令,但它仍然无效,那么您将需要剥离注册表编辑器.
启动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"选项之一匹配(取决于您是否想要在发起错误时坚持命令窗口或不)