双击一个 jar,鼠标转两圈,什么都没发生;换成命令行执行 java -jar,又跳出 no main manifest attribute。jar文件用什么打开方式,先看你想干什么:看里面有什么,还是把程序跑起来。jar 本质是个 zip 包,里面装着 .class 字节码、资源文件,还有一份 META-INF/MANIFEST.MF。

只想看内容,当压缩包打开

把后缀改成 .zip,或者右键用 7-Zip、WinRAR 打开,目录结构一目了然。装了 Java 的电脑上,jar 默认关联到 Java,双击等于执行,不会给你看内容。想看反编译后的源码,用 JD-GUI 这类工具,能直接把 class 显示成 Java 代码,改完再打包也行。

想运行,装 Java 并用命令行启动

java -jar 文件名.jar 是最稳的方式,报错信息也能看见。前提是 PATH 里有 java,java -version 能出版本号。双击没反应通常是三种:没装 Java、装的是 32 位而程序要 64 位、文件关联被别的软件抢走了。

命令行窗口一闪就关,说明程序启动后立刻退出了。先在 cmd 里 cd 到 jar 所在目录,再执行命令,错误堆栈会留在屏幕上。在服务器上跑,用 nohup 加 java -jar 启动,断开 SSH 也不会停,日志默认写到 nohup.out,记得定期清。

报 no main manifest attribute 是怎么回事

MANIFEST.MF 里没有 Main-Class,Java 不知道该从哪个类启动。这种 jar 一般是库文件,给别的程序调用的,不是拿来双击的。真想跑,得用 java -cp xxx.jar 主类全名,主类名要问打包的人或者翻文档。另一个常见报错是 UnsupportedClassVersionError,后面跟着 52、55、61 这类数字,意思是你编译用的 JDK 比运行的 JRE 新,换新版 Java,或者让对方降版本重编。

jar、war、zip 别混着叫

jar 和 war 都是 zip 结构,war 多一层 WEB-INF,给 Tomcat 这类容器用;jar 能直接 java -jar 跑,也能当依赖库。改后缀只是为了用解压软件看,别把改完后缀的文件再拿去运行。手机上也一样,安卓跑不了桌面 jar,那是两套东西。

判断很简单:只是好奇里面有什么,用 7-Zip 或者 JD-GUI;要跑起来,装对应版本的 Java 从命令行启动,双击永远排在最后试。