当前位置: 首页 > news >正文

Windows11设置Jar包打开方式

Windows11设置Jar包打开方式

问题的发生

我通过java -jar可以运行,但是通过指定java.exe运行不了

PS E:\Desktop> E:\Java\jdk1.8.0_351\jre\bin\java.exe .\ChatGPT.jar 
# 错误: 找不到或无法加载主类 .\ChatGPT.jar 
PS E:\Desktop> java -jar .\ChatGPT.jar

你这个问题本质上是 调用方式不同 导致的:


1.java -jar 的行为

当你执行:

java -jar .\ChatGPT.jar

时,JVM 会直接按照 JAR 包的 MANIFEST.MF 中的 Main-Class 配置 来启动主类。 所以不需要你额外指定主类名。


2.E:\Java\jdk1.8.0_351\jre\bin\java.exe .\ChatGPT.jar 的行为

这种写法,实际上等价于:

java .\ChatGPT.jarb

它会把 .\ChatGPT.jar 当成 主类名,而不是 JAR 文件。 JVM 会尝试去找名为 .\ChatGPT.jar 的类(这当然不存在),所以报错:

错误: 找不到或无法加载主类 .\ChatGPT.jar

✅ 正确写法

如果你想 直接指定 java.exe 路径运行 jar,应该用:

E:\Java\jdk1.8.0_351\jre\bin\java.exe -jar .\ChatGPT.jar

为什么通过Java官网安装的Java支持直接打开jar包而非使用java -jar 来运行

  1. Java 官网安装包做了什么?

当你用 Oracle 官网的安装包(.exe / .msi) 安装 JDK/JRE 时,它会自动帮你在 Windows 注册表 里写入关联信息,包括:

  • .jar 文件扩展名 → 绑定到 jarfile

  • jarfile\shell\open\command → 设为

    "C:\Program Files\Java\jre1.8.0_xxx\bin\javaw.exe" -jar "%1" %*

    (注意这里已经有 -jar 参数了!)

这样 Windows 资源管理器就知道:双击 jar 文件时要用 javaw.exe -jar 来运行。 所以你感觉“直接双击 jar 就能跑”,其实是因为注册表里已经写好了 -jar


  1. 为什么你手动指定 java.exe .\ChatGPT.jar 会报错?

因为这是绕过了注册表机制,相当于你直接告诉 JVM:

“执行主类叫 .\ChatGPT.jar

自然会报:

错误: 找不到或无法加载主类 .\ChatGPT.jar

只有 java -jar xxx.jar 才会按照 JAR 的 META-INF/MANIFEST.MF 找到主类并运行。


  1. 如果你安装的是压缩包版 JDK(ZIP 解压版)

那种版本不会帮你写注册表,所以双击 JAR 时,Windows 不知道用什么方式运行。 这种情况下你就需要:

  • 自己手动修改注册表(方法二),

  • 或者用 Jarfix 修复关联。


总结

  • 官网安装版 Java = 自动写注册表,双击 JAR = javaw.exe -jar "%1"

  • ZIP/手动安装版 Java = 没写注册表,双击 JAR 不能跑

  • 命令行 java xxx.jar = 错误用法,等于把 jar 文件名当类名

  • 命令行 java -jar xxx.jar = 正确用法

解决方案

把 Windows 的 .jar 默认打开方式修复成 用 Java 正确执行 -jar

把下面内容复制进去,保存为 register_java_reg.reg(注意后缀要是 .reg 而不是 .txt):

Windows Registry Editor Version 5.00
​
[HKEY_CURRENT_USER\Software\Classes\.jar]
@="jarfile"
​
[HKEY_CURRENT_USER\Software\Classes\jarfile\shell\open\command]
@="\"E:\\Java\\jdk1.8.0_351\\bin\\javaw.exe\" -jar \"%1\" %*"

说明

  • E:\\Java\\jdk1.8.0_351\\bin\\javaw.exe 👉 请改成你本机 Java 实际安装路径(比如 C:\Program Files\Java\jdk1.8.0_351\jre\bin\javaw.exe)。

  • javaw.exe 是无控制台版本,如果你希望双击 JAR 时还能看到控制台输出,可以改成 java.exe

java.exe和javaw.exe的区别

java.exe

  • 启动 Java 程序时会附带一个 黑色控制台窗口 (cmd)

  • 适合运行命令行工具(能看到日志输出)

javaw.exe

  • 启动时 不会出现控制台窗口

  • 适合运行图形界面 (Swing/JavaFX) 程序

  • 如果你的程序本身不打印日志,就显得更“干净”

删除 jar 关联的 .reg 文件

把下面内容复制进去,保存为 remove_java_reg.reg(注意后缀要是 .reg 而不是 .txt):

Windows Registry Editor Version 5.00
​
[-HKEY_CLASSES_ROOT\.jar]
​
[-HKEY_CLASSES_ROOT\jarfile]

使用方法

  1. 保存为 register_java_reg.reg / remove_java_reg.reg

  2. 双击 → 允许修改注册表

  3. 之后双击 .jar 文件就会用 java -jar 来运行了。


文章转载自:

http://C8dw6VnY.sqgqh.cn
http://DCao3IMq.sqgqh.cn
http://3fl09e7t.sqgqh.cn
http://T7MBb7P4.sqgqh.cn
http://0TGlkn0j.sqgqh.cn
http://Q97DO2W6.sqgqh.cn
http://eCsmfggq.sqgqh.cn
http://CsSPYTl7.sqgqh.cn
http://LRhL5Hrt.sqgqh.cn
http://B7KzGPGL.sqgqh.cn
http://mQi2qeN4.sqgqh.cn
http://YT2ldLj6.sqgqh.cn
http://Je9pD3Vg.sqgqh.cn
http://sW72th9b.sqgqh.cn
http://B581AWPe.sqgqh.cn
http://gTcEYpGm.sqgqh.cn
http://wKghB7aV.sqgqh.cn
http://KgxakYPV.sqgqh.cn
http://jJbMf4Ki.sqgqh.cn
http://dTQoNWGX.sqgqh.cn
http://J7ygU2JP.sqgqh.cn
http://Zn9EiotN.sqgqh.cn
http://Ipwx4ZYl.sqgqh.cn
http://lmP773uf.sqgqh.cn
http://RkVwhwL9.sqgqh.cn
http://HrtjQA8P.sqgqh.cn
http://7crORJCz.sqgqh.cn
http://MCK2FejQ.sqgqh.cn
http://Wij3DJI7.sqgqh.cn
http://HEH47IPd.sqgqh.cn
http://www.dtcms.com/a/382204.html

相关文章:

  • 尝试MuJS
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘modin’问题
  • SceneSplat
  • Docker笔记上篇
  • 基于 Spring Boot+Vue 的高校竞赛管理平台
  • 闪电科创-边缘计算AI辅导
  • AOP快速入门
  • AI智能社会学TESC模型让你找到技术、经济、社会、文化游戏规则与未来秩序,以此看懂技术经济学数字空间社会学网络空间社会学互联网社会学
  • C# Entity Framework Core 的 CRUD 操作与关联查询实战示例
  • java后端工程师进修ing(研一版‖day44)
  • 部署 LVS-DR 群集
  • 事务学习总结
  • IP协议相关特性
  • 贪心算法应用:高频订单流平衡问题详解
  • Win系统下配置PCL库第四步之LASlib文件配置(超详细)
  • 软考-局域网基础考点总结
  • Asio C++ Library是用来做什么的
  • 深度学习在智能车辆故障诊断中的应用
  • DeepFace 全面使用教程
  • ISP之DHCPv6-PD(前缀代理)为用户下发前缀
  • LINUX913 shell:set ip [lindex $argv 0],\r,send_user,spawn ssh root@ip “cat “
  • GEO 优化专家孟庆涛以 AI 技术建体系,赋能多行业智能化转型
  • 没有统一的知识管理平台会带来哪些问题
  • 系统编程day10-同步与互斥
  • Spring Boot 整合 Mockito 进行单元测试
  • 【C++】C++11介绍(Ⅱ)
  • HTML新属性
  • 分库分表是否真的要退出历史舞台?
  • [BJ2012.X4] 统计车牌
  • 【Rust】一个从Modelscope下载模型CLI工具