在没有命令提示的情况下在windows上运行Java8JAR

在没有命令提示的情况下在windows上运行Java8JAR,java,windows,jar,click,double,Java,Windows,Jar,Click,Double,这是一个简单的Hello World测试应用程序 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) {

这是一个简单的Hello World测试应用程序

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中被导出为“可运行的JAR文件”。

在命令提示符下使用
java-jar hello.jar
打开它可以工作

但是,当尝试使用双击打开它时,什么也没有发生

注1:Java平台是与此类型关联的默认程序

注2:
java-version

java版本“1.8.0_60”

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

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

问题双击没有执行命令行JAVA 8 jar文件。
如何解决这个问题?

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

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

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


最优雅的解决方案,但需要更多的后台工作,是在JScrollPane中实例化一个由JFrame和JTextArea组成的简单GUI,然后将输出附加到文本区域。

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


根据您想要实现的目标,您可以创建一个脚本来运行您的应用程序,也可以创建一些图形界面。

您的jar可能正在使用javaw.exe打开。您可以通过执行命令来验证这一点

ftype | find "jarfile"
如果它显示为
javaw.exe

ftype jarfile="C:\Program Files\Java\jdk1.8.0_45\jre\bin\javaw.exe" -jar "%1" %*
ftype jarfile="C:\Program Files\Java\jdk1.8.0_45\jre\bin\java.exe" -jar "%1" %*
将其更改为
java.exe

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

我试过了,效果很好。

我发现的Stackoverflow答案没有解决确切的问题,或者已经过时。您必须在程序上附加一个控制台。如果您直接从cmd提示符启动它,您将使用此提示符实例来运行它。另一方面,您的jar没有这样的cmd提示符实例。我认为您需要创建一个bat/exe文件,实际执行
java-jar hello.jar
命令。@BenWin您能进一步解释一下吗?@uuiui我曾想过要这样做,但执行一个简单的执行任务似乎太麻烦了。如果找不到任何其他解决方案,我可能会求助于此。将其更改为“java.exe”将使命令提示符在每次执行jar文件时启动,即使它是GUI应用程序。但是,要使此命令正常工作,您必须以管理员身份启动命令提示符。