【问题标题】:EXE4j Jar to exe errorEXE4j Jar 到 exe 错误
【发布时间】:2013-06-11 03:30:58
【问题描述】:

我最近是 Java 7 update 21 JDK,我用 netbeans 创建了 java 应用程序 为了分发我的 jar,我使用 Exe4j 4.5.2 Jar 到 exe。

现在,当我使用 Exe4j 时,它会创建 exe,但是当我执行它时,它会显示错误消息。

“无法启动 JVM。最大堆大小 (-Xmx) 可能太大,或者防病毒或防火墙工具可能会阻止执行。”

经过几次测试后,我发现我以前(在安装 JDK7u21 之前)从 exe4j 工作的应用程序 exe 文件现在也给出了相同的错误消息。

(我使用的是 64 位版本的 JDK 和 EXE4j,但编译的 exe 是 32 位的。我想要 32 位的应用程序)

【问题讨论】:

  • 如果最大堆大小超过 3gb 或可用系统内存,您将收到此错误。您没有告诉我们您使用的是什么设置
  • 这不是可用内存错误。这是由于未安装 32 位 JRE。
  • 说,没错,Windows 保留 1gb 的内存,但 32 位进程最多只能访问 4gb。一个 32 位进程在 Windows 机器上不能访问超过 3gb...

标签: java jar jvm heap-memory exe4j


【解决方案1】:

Exe4j 通过加载目标 JVM 的 DLL 来工作,这要求 JVM 与可执行包装器具有相同的“位数”。所以 32 位的 Exe4j 包装器只能加载 32 位的 JVM,而 64 位的包装器只能加载 64 位的 JVM。

当 Exe4j 在注册表中搜索 JVM 时,它将忽略任何错误位数的 JVM,而仅查看其自己的位数。但是,如果您通过设置 EXE4J_JAVA_HOME 环境变量来强制 Exe4j 加载特定的 JVM,并且位数不匹配,则 JVM 的加载将失败。

如果您想要 32 位应用程序(即可执行包装器),则必须安装 32 位 JRE 或 JDK。另一方面,如果您希望使用 64 位 JVM,则必须提供 64 位可执行包装器。

【讨论】:

  • 两种方式都有效。64 位和 32 位。哪个版本最好用?
  • 您可以同时提供两者,并让您的用户决定使用哪个版本:java.com/en/download/faq/java_win64bit.xml 如果您只想提供一个,考虑到 64 位版本不适用于旧的 32 位版本机器,我建议提供 32 位版本。
  • 感谢您的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多