我正在清理和构建一个项目,该项目正在“dist”文件夹中创建它的.jar文件。但问题是,我不能运行它。我双击它,什么也没发生。我在环境变量的“path”选项中设置了jdk的“bin”文件夹。有什么我不知道的吗?我对这一切都很陌生,非常感谢你的帮助。
h4cxqtbf1#
建议自己学习如何制作可执行文件,而不是依赖自动生成的jar文件这里有一个教程。在默认jar文件的情况下,很可能必须执行
java -jar MY_AWESOME_JAR_FILE_NAME.jar
sf6xfgos2#
有三个常见的原因:
windows,因为微软显然没有能力修复古老的愚蠢,迫使应用程序要么有一个终端,在这种情况下,一个丑陋的黑匣子总是弹出,要么他们没有,以后不能做一个。这意味着仅在windows上,有两个java可执行文件: java.exe 以及 javaw.exe ,唯一的区别是javaw没有得到一个盒子。但是,它没有一个框-sysin和sysout几乎什么都不做。默认情况下,双击jar以javaw启动它,这意味着如果应用程序的唯一交互是从 System.in 写信给 System.out 或者 System.err ,你什么也看不到。除了生成一个gui应用程序,或者生成一个显式运行的批处理文件(仅适用于windows的概念)之外,没有其他修复方法 java.exe .这不适用于linux或Mac。
java.exe
javaw.exe
System.in
System.out
System.err
可运行的jar文件有三个属性:jar中有一个类 public static void main(String[] args) 方法内部。该类在jar的清单中的key下命名(完全限定) Main-Class 所需的任何dep要么被烘焙到jar中,要么被烘焙到另一个jar中,这些其他jar被命名,用空格分隔,并且相对于您双击的jar所在的目录,在manifest中,在key下 Class-Path . 请注意,全局环境变量 CLASSPATH 双击jar时不执行任何操作。你可以检查所有这些;jar只是zip文件。此外,还有 jar jdk中的工具可以解压它们,而清单只是一个名为 META-INF/MANIFEST.MF 在里面。你可以打开它,看看它是否配置正确。
public static void main(String[] args)
Main-Class
Class-Path
CLASSPATH
jar
META-INF/MANIFEST.MF
首先检查任何随机的可运行jar。也许你安装了一个无头java。请注意,现在(自从jdk9和更高版本以来),“最终用户”甚至不会安装java,双击jar来运行它的概念基本上已经过时了。要制作“桌面”java应用程序,您需要提供一个完整的jre(如果需要的话,可以使用treeshaken),并负责安装程序。jdk中有一些有限的工具(从9开始)可以帮助您(例如 jlink ).
jlink
kjthegm63#
使用cli查看java是否设置正确,jar是否损坏,或者jar是否与已安装的java版本不兼容。确保jar文件与java二进制文件正确关联。说明可以在这里找到
disho6za4#
只需编辑清单文件中添加main方法。如果您有任何附加的引用库,只需将它们放入类路径中即可。舱单规格如下:https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html
4条答案
按热度按时间h4cxqtbf1#
建议自己学习如何制作可执行文件,而不是依赖自动生成的jar文件
这里有一个教程。
在默认jar文件的情况下,很可能必须执行
sf6xfgos2#
有三个常见的原因:
在windows上,使用sysin/sysout
windows,因为微软显然没有能力修复古老的愚蠢,迫使应用程序要么有一个终端,在这种情况下,一个丑陋的黑匣子总是弹出,要么他们没有,以后不能做一个。这意味着仅在windows上,有两个java可执行文件:
java.exe
以及javaw.exe
,唯一的区别是javaw没有得到一个盒子。但是,它没有一个框-sysin和sysout几乎什么都不做。默认情况下,双击jar以javaw启动它,这意味着如果应用程序的唯一交互是从
System.in
写信给System.out
或者System.err
,你什么也看不到。除了生成一个gui应用程序,或者生成一个显式运行的批处理文件(仅适用于windows的概念)之外,没有其他修复方法
java.exe
.这不适用于linux或Mac。
jar文件已损坏
可运行的jar文件有三个属性:
jar中有一个类
public static void main(String[] args)
方法内部。该类在jar的清单中的key下命名(完全限定)
Main-Class
所需的任何dep要么被烘焙到jar中,要么被烘焙到另一个jar中,这些其他jar被命名,用空格分隔,并且相对于您双击的jar所在的目录,在manifest中,在key下Class-Path
. 请注意,全局环境变量CLASSPATH
双击jar时不执行任何操作。你可以检查所有这些;jar只是zip文件。此外,还有
jar
jdk中的工具可以解压它们,而清单只是一个名为META-INF/MANIFEST.MF
在里面。你可以打开它,看看它是否配置正确。java安装中断
首先检查任何随机的可运行jar。也许你安装了一个无头java。请注意,现在(自从jdk9和更高版本以来),“最终用户”甚至不会安装java,双击jar来运行它的概念基本上已经过时了。要制作“桌面”java应用程序,您需要提供一个完整的jre(如果需要的话,可以使用treeshaken),并负责安装程序。jdk中有一些有限的工具(从9开始)可以帮助您(例如
jlink
).kjthegm63#
使用cli查看java是否设置正确,jar是否损坏,或者jar是否与已安装的java版本不兼容。
确保jar文件与java二进制文件正确关联。说明可以在这里找到
disho6za4#
只需编辑清单文件中添加main方法。如果您有任何附加的引用库,只需将它们放入类路径中即可。舱单规格如下:https://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html