Java 如何在64位jvm上运行32位jar

Java 如何在64位jvm上运行32位jar,java,jar,jvm,Java,Jar,Jvm,我下载了一个java应用程序(来自android日志的桌面LogCat查看器),并尝试运行它。我的问题是,我遇到了一个错误,这似乎意味着我无法在64位jvm上运行32位java应用程序。堆栈跟踪在下面 我需要指出的是,我不能改变来源。我没有访问它的权限。我需要知道如何配置jvm来运行jar。我在Windows7中运行 > java -jar LogcatOfflineViewer_20120505.jar Exception in thread "main" java.lang.refle

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

我需要指出的是,我不能改变来源。我没有访问它的权限。我需要知道如何配置jvm来运行jar。我在Windows7中运行

> 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
>java-jar LogcatOfflineViewer_20120505.jar
线程“main”java.lang.reflect.InvocationTargetException中出现异常
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
原因:java.lang.UnsatifiedLinkError:无法在64位JVM上加载32位SWT库
位于org.eclipse.swt.internal.Library.loadLibrary(未知源)
位于org.eclipse.swt.internal.Library.loadLibrary(未知源)
在org.eclipse.swt.internal.C.(未知来源)
位于org.eclipse.swt.widgets.Display(未知源)
位于com.logcat.offline.UIThread.runUI(UIThread.java:112)
位于com.logcat.offline.Main.Main(Main.java:6)
... 还有5个

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


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

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


看起来,您也可以使用-d32或-d64开关,即使在我的系统中不起作用(请参阅此项和其他替代项)

您需要32位jvm或该SWT应用程序的64位导出。您可以尝试安装32位jvmjre@RobinChander是否无法以某种兼容模式运行64位jvm?这似乎是一个相当大的疏忽Oracle@ewok它与Java、Oracle或JVM无关。这就是应用程序在几乎所有操作系统上运行的方式。@ewok你是如何克服这个问题的?@Krishna这是操作系统强加的限制,在某种程度上是32位和64位应用程序之间的根本区别。因此,在64位mac操作系统上无法执行任何32位应用程序,是吗?因为我需要在64位mac上执行该应用程序,所以我指的是swt应用程序。你能给我一些吗idea@Krishna不能使用64位库运行32位应用程序。大多数64位操作系统都有32位仿真器和32位库。它们有间接的方法吗?@Krishna是的,您可以让64位JVM与运行32位DLL/共享库的32位JVM对话。您还可以让32位JVM与运行64位DLL/共享库的64位JVM对话。i、 e.使用RMI或RPC/JMS。