我用 SWT 制作了一个应用程序并导出它的 jar,然后我就可以运行它了。 我的机器是(win xp)。
和我的Java版本:java版本“1.6.0_39” Java(TM) SE 运行时环境(版本 1.6.0_39-b04) Java HotSpot(TM) 客户端虚拟机(版本 20.14-b01,混合模式,共享)
然后我尝试在 Windows 7 机器上运行我的 jar : java版本“1.7.0_17” Java(TM) SE 运行时环境(版本 1.7.0_17-b02) Java HotSpot(TM) 64 位服务器 VM(内部版本 23.7-b01,混合模式)
但是这台机器无法启动该应用程序。 然后我尝试使用以下命令在 CMD 上运行 Jar: java -jar myapp.jar 然后我得到了异常(exception):`
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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 projectPackage.G.init(G.java:258)
at projectPackage.G.main(G.java:225)
... 5 more`
并且我的 Eclipse 使用的是 jre6
那么我怎样才能生成在两台机器上工作的 Jar 呢?
预先感谢您的宝贵时间
最佳答案
嗯,这个异常(exception)是不言自明的:
UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM
要让你的 jar 在 32 位和 64 位上运行,你应该看看这个答案:
Create cross platform Java SWT Application
您基本上必须包含您计划将应用程序部署到的所有平台的 swt.jar,并且给定的代码将在运行时确定要使用哪个 .jar 版本。
<小时/>一个快速但肮脏的修复方法是打开您的 jar 文件并将包含的 swt.jar (32 位) 与其他版本 (64 位) 交换。但是,这会将您的应用限制为 64 位。
<小时/>结论:
- 要么为不同的操作系统和位版本创建单独的 jar(每个仅包含一个 swt.jar)
- 或者创建一个 jar 来管理所有这些(包含所有 swt.jar)
关于java - 如何在 xp 和 windows 7 上运行 SWT 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18612691/