当前位置: 首页 > 知识库问答 >
问题:

如何在xp和windows 7上运行SWT应用程序

傅志用
2023-03-14

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

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

但是这台机器无法启动应用程序。然后,我尝试使用java-Jar-myapp在CMD上运行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以在两台机器上工作呢?

提前感谢您的时间

共有2个答案

左丘元徽
2023-03-14

问题来自您的swt dll:它们适用于32位java,而您有一个Win7 64位操作系统。转到这里并下载适当的jarhttp://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>
易京
2023-03-14

嗯,例外情况是不言而喻的:

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

要让您的jar同时在32位和64位上工作,您应该看看以下答案:

创建跨平台Java SWT应用程序

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

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

结论:

  • 或者为不同的OSs和bit版本创建单独的jar(每个版本只包含一个swt.jar)
  • 或者创建一个jar来管理它们(包含所有swt.jar)
 类似资料:
  • 更新2: 除了必须按照我在第一次更新中所说的那样做之外,我还必须将签名从“对ClickOnce清单签名”更改为“对程序集签名”,我的应用程序现在正在windows XP上工作。

  • 我用JDK 13制作了一个java应用程序。我用launch4j创建了一个exe文件。但是没有人可以运行它,因为每个人都有jre 1.8版本,而且它不会启动。。。我必须在安装中包含java jdk 13,并用它设置java_home?

  • 问题内容: 如何在Mac上用Java编译和运行程序? 我是新来的。 我还下载了一个在此向我建议的程序,称为wrangler,如果与情况有关。 问题答案: 在Mac OSX或任何主要操作系统上编译和运行Java应用程序非常容易。Apple随OSX一起提供了一个功能齐全的Java运行时和开发环境,因此您要做的就是编写Java程序并使用内置工具来编译和运行它。 编写您的第一个程序 第一步是编写一个简单的

  • 问题内容: 我刚刚开始学习TDD,并且正在使用Tkinter GUI开发程序。唯一的问题是,一旦调用该方法,测试套件就会挂起,直到关闭窗口。 这是我的代码的示例: 测试Tkinter应用程序的合适方法是什么?还是只是“不”? 问题答案: 您可以做的一件事是在单独的线程中生成mainloop并使用您的主线程运行实际的测试;照看mainloop线程。进行断言之前,请确保检查Tk窗口的状态。 多线程处理

  • 问题内容: 我试图确保脚本仍在开发服务器上运行。它整理统计数据并提供Web服务,因此应该可以持续使用,但是一天几次,它会由于未知原因而死掉。当我们注意到我们只是再次启动它时,但是后部很痛苦,有些用户没有权限(或专有技术)来启动它。 我内的程序员想花几个小时来解决问题的根源,但内心的忙碌的人认为必须有一种简便的方法来检测应用程序是否未运行,然后重新启动它。 我知道我 可以 通过grep cron-s

  • 问题内容: 我无法在端口80上启动应用程序。 我已经在本地计算机(使用我的IDE和本地服务器)上尝试过,没有运气。 我检查了其他类似的帖子,并确保我在具有root用户的服务器上运行jar。 这是错误: 问题答案: 在Linux上,只能由root用户打开低于1024的端口,因此默认情况下限制端口80 如果要在80端口上发布应用,则需要将请求从80端口重定向到要运行springapp(例如8080)端