Java Can';t使用双击打开.jar,仅使用cmd

Java Can';t使用双击打开.jar,仅使用cmd,java,eclipse,jar,Java,Eclipse,Jar,我用EclipseIndigo制作了一个非常简单的程序,并将其作为可执行jar导出到我的桌面。如果我使用命令“java-jar SayHello.jar”,程序会运行,但是如果我双击桌面上的SayHello.jar,我的鼠标会得到旋转的轮子,看起来好像它正在加载什么东西,但是轮子会离开,什么也不会发生。这会发生在每个jar文件中,而不仅仅是这个文件。我花了好几个小时研究如何解决这个问题,但没有任何效果。任何帮助都将不胜感激。谢谢 对于Windows上的Java(您实际上没有指定)双击.jar文件

我用EclipseIndigo制作了一个非常简单的程序,并将其作为可执行jar导出到我的桌面。如果我使用命令“java-jar SayHello.jar”,程序会运行,但是如果我双击桌面上的SayHello.jar,我的鼠标会得到旋转的轮子,看起来好像它正在加载什么东西,但是轮子会离开,什么也不会发生。这会发生在每个jar文件中,而不仅仅是这个文件。我花了好几个小时研究如何解决这个问题,但没有任何效果。任何帮助都将不胜感激。谢谢

对于Windows上的Java(您实际上没有指定)双击
.jar
文件时的默认操作,正如您所发现的,是使用
javaw
JVM(即“GUI”模式)运行它,代码写入
System.out
的任何内容都将被丢弃。
java
JVM确实会输出到控制台窗口,但是如果该窗口是通过双击创建的,那么它会在代码退出后立即消失,正如您所发现的那样

注意
.jar
(在
HKCR\jarfile\shell\open\command
中)的“关联”必须是

或者控制台的
java.exe
,无论是还是
-jar
。我不相信控制面板会正确地设置额外的标志参数,这会导致“找不到主类”

一个包含两行的批处理文件
java-jar myjar
,然后在双击时
pause
,应该运行该类,当它退出时,请等待,直到您按下任意键,然后销毁该窗口。您可以改为使用
timeout numseconds
来限制等待


添加:有另一种防止控制台窗口消失的方法:使用
cmd/s/k
而不是批处理文件。

.jar
文件不是可执行文件,它们与
.zip
文件更接近。您需要将其包装在可执行文件中,或者编写一个批处理文件,以便在运行时执行
java-jar SayHello.jar
。。。文件扩展名关联如果您需要反编译jar文件,请查看此文件。谢谢您的回答。如何将.jar包装在可执行文件中,或者在运行命令时编写批处理文件来执行命令?如果我把这个文件发给别人,哪一个会更方便呢?
"(YOUR_JREDIR_usually_progfiles-arch-jre-version)\bin\javaw.exe" -jar "%1" %*