【问题标题】:How To Run SWT application on both xp and windows 7如何在 xp 和 windows 7 上运行 SWT 应用程序
【发布时间】:2013-09-07 21:25:32
【问题描述】:

我用 SWT 创建了一个应用程序并导出了它的 jar,然后我就可以运行它了。 我的机器是(win xp)。

还有我的 Java 版本:java 版本“1.6.0_39” Java(TM) SE 运行时环境 (build 1.6.0_39-b04) Java HotSpot(TM) Client VM(build 20.14-b01,混合模式,共享)

然后我尝试在机器 windows 7 上运行我的 jar: java版本“1.7.0_17” Java(TM) SE 运行时环境 (build 1.7.0_17-b02) Java HotSpot(TM) 64 位服务器 VM(内部版本 23.7-b01,混合模式)

但是这台机器无法启动应用程序。 然后我尝试使用以下命令在 CMD 上运行 Jar:java -jar myapp.jar 然后我得到了异常:`

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 以在两台机器上工作?

提前感谢您的宝贵时间

【问题讨论】:

    标签: java jar jvm swt


    【解决方案1】:

    嗯,这个例外是不言自明的:

    UnsatisfiedLinkError:无法在 64 位 JVM 上加载 32 位 SWT 库

    要让您的 jar 在 32 位和 64 位上运行,您应该看看这个答案:

    Create cross platform Java SWT Application

    您基本上必须为您计划将应用部署到的所有平台包含 swt.jar,并且给定的代码将在运行时确定要使用的 .jar 版本。


    一个快速而肮脏的解决方法是打开您的 jar 文件并将包含的 swt.jar(32 位)与其他版本(64 位)交换。但是,这会将您的应用程序限制为 64 位。


    结论

    • 为不同的操作系统和位版本创建单独的 jar(每个仅包含一个 swt.jar)
    • 或者创建一个 jar 来统治它们(包含所有 swt.jar)

    【讨论】:

    • 哦,是的,我明白了。我现在的问题是如何生成仅在 64 位 JVM 上运行的版本我将用 64 位替换我机器中的 32 位 JVM 还是我必须修复 Eclipse 配置以生成适当的 jar?抱歉,我完全误解了这个问题
    • @HebaAhmed 如果您将 64 位版本添加到构建路径并删除 32 位版本,您应该没问题。
    • @HebaAhmed 不需要下载 64bit eclipse,只需要 64bit 版本的 SWT:SWT Binary and Source
    【解决方案2】:

    问题来自您的 swt dll:它们适用于 32 位 java,而您有 Win7 64 位操作系统。 去这里下载正确的jar http://download.eclipse.org/eclipse/downloads/drops4/R-4.3-201306052000/#SWT 现在,要在每个拱门上都可用,您需要根据操作系统下载库,然后在运行时加载它,如下所示:

    URLClassLoader child = new URLClassLoader (swtJar.toURL(), this.getClass().getClassLoader());
    Class classToLoad = Class.forName ("org.eclipse.swt.widgets.Display", true, child);
    Method method = classToLoad.getDeclaredMethod ("getDefault");
    Object instance = classToLoad.newInstance ();
    Object result = method.invoke (instance);
    

    或者你可以使用我的 jnlp 文件:

    <resources os="Windows" arch="x86">
        <nativelib href="swt-native-win32-windows-x86.jar" />
    </resources>
    
    <resources os="Windows" arch="x86_64">
        <nativelib href="swt-native-win32-windows-x86_64.jar" />
    </resources>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2013-01-30
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      相关资源
      最近更新 更多