【问题标题】:how to run 32 bit jar on 64 bit jvm如何在 64 位 jvm 上运行 32 位 jar
【发布时间】:2012-11-03 07:36:44
【问题描述】:

我下载了一个 java 应用程序(来自 android 日志的桌面 ​​LogCat 查看器)并尝试运行它。我的问题是我收到一个错误,似乎暗示我无法在 64 位 jvm 上运行 32 位 java 应用程序。堆栈跟踪如下。

我需要指出我无法更改来源。我无权访问它。我需要知道如何配置我的 jvm 来运行 jar。我在 Windows 7 中运行。

> java -jar LogcatOfflineViewer_20120505.jar
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM
        at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
        at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
        at org.eclipse.swt.internal.C.<clinit>(Unknown Source)
        at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source)
        at com.logcat.offline.UIThread.runUI(UIThread.java:112)
        at com.logcat.offline.Main.main(Main.java:6)
        ... 5 more

【问题讨论】:

  • 您需要一个 32 位 jvm 或该 SWT 应用程序的 64 位导出。
  • 你可能想尝试安装 32 位 jre
  • @RobinChander 有没有办法在某种兼容模式下运行 64 位 jvm?这似乎是甲骨文的重大疏忽
  • @ewok 它与 Java、Oracle 或 JVM 无关。它是应用程序在几乎所有操作系统上运行的方式。
  • @ewok 你是如何克服这个问题的?

标签: java jar jvm


【解决方案1】:

JAR 不是 32 位或 64 位的,它可以在任一 JVM 上运行。

但是,本机共享库是 32 位或 64 位的,它只能在具有该位数的 JVM 上运行。这是应用程序在 Windows 和 Linux(以及所有其他操作系统 AFAIK)上运行方式的限制。无法在 32 位 JVm 上加载 64 位库,反之亦然。您需要将您的 sahred 库版本与您的 JVM 相匹配。

【讨论】:

  • @Krishna 这是操作系统强加的限制,在某种程度上是 32 位和 64 位应用程序之间区别的基础。
  • 所以没有办法在 64 位 mac os 上执行任何 32 位应用程序是吗?因为我需要在 64 位 mac 上执行该应用程序,所以我的意思是 swt 应用程序。你能给我一些想法吗
  • @Krishna 您无法使用 64 位库运行 32 位应用程序。大多数 64 位操作系统也有 32 位模拟器和 32 位库。
  • 他们有什么间接的方法吗?
  • @Krishna 是的,您可以让 64 位 JVM 与运行 32 位 DLL/共享库的 32 位 JVM 对话。您还可以让 32 位 JVM 与运行 64 位 DLL/共享库的 64 位 JVM 通信。即使用 RMI 或 RPC/JMS。
【解决方案2】:

我有一个类似的问题,我通过在命令提示符中提供完整路径解决了确保在正确的 jvm 上运行我的 jar(我的系统中已经有 2 个版本的 java)

您似乎也可以使用 -d32 或 -d64 开关,即使在我的系统中不起作用(请参阅这个和其他替代方案是 How to run 32-bit Java on Mac OSX 10.7 Lion

【讨论】:

    猜你喜欢
    • 2012-03-12
    • 2011-05-13
    • 2013-09-16
    • 2012-07-26
    • 2016-03-07
    • 1970-01-01
    • 2012-03-19
    • 2013-11-20
    • 2011-06-26
    相关资源
    最近更新 更多