我想通过双击运行一个 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 相关联
命令提示符打开几分之一秒后消失。
即使我希望用户输入一些数据,双击操作也不会等待用户输入任何内容。
问题出在哪里?
最佳答案
当您使用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
包围 java 命令的调用,即:
ftype jarfileterm=cmd /s /k ""C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*"
assoc .jar=jarfileterm
如果这些命令有效,则双击 jar 文件将导致命令窗口弹出并保留。
您不能使用 Open With...
或使用 Default Programs
来设置足够复杂的命令行来运行 jar 文件。如果您已经成功地尝试了所有这些努力 ftype
和 assoc
命令但它仍然不起作用,那么您将需要剥离注册表编辑器。
启动 regedit
,然后在 HKEY_CLASSES_ROOT
下搜索名为 .jar 的 key - 这应该会在其下方产生一个名为 (默认)
有一个值,如果您的 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”选项(取决于您是否希望在启动时出错时保留命令窗口)
关于java - 双击 JAR 文件不会打开命令提示符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10446986/