在没有命令提示符的情况下在Windows上运行JAVA 8 jar

这是一个简单的Hello Worldtesting应用程序。

import java.io.IOException; public class Main { public static void main(String[] args) { System.out.println("Hello World!"); try { System.in.read(); } catch (IOException e) { System.out.println("IOException : "+e.getMessage()); } } } 

它在Eclipse中被导出为“Runnable JAR文件”。 在这里输入图像说明

在命令提示符下使用java -jar hello.jar打开它。

然而,当试图打开它双击,没有任何反应。

注1:Java平台是与此types相关的默认程序。

在这里输入图像说明

注2: java -version

java版本“1.8.0_60”

Java(TM)SE运行时环境(build1.8.0_60-b27)

Java HotSpot(TM)64位服务器虚拟机(构build25.60-b23,混合模式)

问题双击不执行命令行JAVA 8 jar文件。 我该如何解决呢?

如果双击一个*.jar它实际上是以javaw -jar Hello.jar开始的。 java.exejavaw.exe的区别在于, javaw没有关联的控制台窗口。 由于您的测试应用程序不显示任何GUI元素,因此它看起来像不会执行。

根据你想达到的目的,你可以创建一个脚本来运行你的应用程序,或者你创建一个图形界面。

当从文件资源管理器执行JAR时,没有shell将文本输出写入。 从命令行运行它时,它已经包装在一个shell中,因此System.out流已经设置为shell的输出流,因此可以看到打印语句。

最简单的实际解决方案是创建一个批处理文件,该文件执行java -jar hello.jar命令,在文件资源管理器中打开它时将启动命令窗口。

另一个解决方案是使用Runtime.exec()从Java应用程序中启动cmd.exe上下文,并将输出流设置为与返回的过程对象相同。

最优雅的解决方案,但需要更多的后台工作,将实例化一个简单的图形用户界面,包括一个JScrollPane中的JFrameJTextArea ,然后你将输出到文本区域。

你的jar可能会打开javaw.exe。 你可以通过执行命令来验证

 ftype | find "jarfile" 

如果显示为javaw.exe

 ftype jarfile="C:\Program Files\Java\jdk1.8.0_45\jre\bin\javaw.exe" -jar "%1" %* 

将其更改为java.exe

 ftype jarfile="C:\Program Files\Java\jdk1.8.0_45\jre\bin\java.exe" -jar "%1" %* 

我试过了,它为我工作。