在没有命令提示的情况下在windows上运行Java8JAR
这是一个简单的Hello World测试应用程序在没有命令提示的情况下在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) {
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应用程序。但是,要使此命令正常工作,您必须以管理员身份启动命令提示符。