处理SWT bit版本与JDK bit版本的对应

本文探讨了SWT的32-bit和64-bit版本与JDK的兼容性问题,指出两者必须匹配使用,否则会导致版本不兼容错误。为了解决产品在不同位数JDK环境下运行的问题,文章提出通过InstallAnywhere扩展实现动态绑定相应位数的SWT包,但在某些情况下可能判断失误。最后,提出一种容错处理方案:在产品启动时尝试加载swt32.jar,异常则切换到swt64.jar,以此确保产品首次启动的正常运行。该方法作为临时解决方案,未来将寻找更优的解决策略。

        bit版本(bit version),是从国外一个论坛的帖子抄过来的,我原本也不清楚该怎样命名它,觉得bit version挺合适的,就这样使用起来了。

        SWT bit version有32-bit和64-bit两种,同样,jdk也有32-bit和64-bit两种。经过多次测试,发现32-bit SWT只能安装在32-bit JDK 上,而64-bit SWT也只能安装在 64-bit JDK上,两都不能交叉使用,即32-bit SWT 不能在 64-bit JDK 上使用, 64-bit SWT 不能在 32-bit JDK 上使用,这两种情况都会报类似"版本不兼容“的错误。我们的产品用到SWT,而客户环境的JDK可能会是32-bit或64-bit的,一般情况下,可以做个划分,比如产品也对应地分出两个版本,版本32-bit就只能安装在32-bit的JDK上,版本64-bit就只能安装在64-bit的JDK上,但这样不好,如果客户装了32-bit的之后发现不行,再重新安装64-bit的,换成是我,也会不爽的,所以要解决这个问题,让产品能够根据客户选择的JDK bit version来选用对应的SWT包。

        研究了一下InatallAnywhere,发现可以对它做扩展。在这里,我写了一个扩展,在产品安装完之后,执行一个Action,检查客户所选择的JDK的bit version,再绑定对应bit version的SWT包。这种方法测试一段时间,发现可行性还挺好的,但之后又发现,如果客户不选择JDK,产品会到system32(此时是windows platform)时读取java.exe,这时,会导致该Action判断失误,所以这种方法不能完全解决问题。

        接着考虑了一段时间,想出了一个不算太好的方法来做个“容错”处理。在产品安装完后的lib包有swt32.jar和swt64.jar

### 配置和运行SWT应用程序 #### 安装SWT库 为了使 IntelliJ IDEA 支持 SWT 应用程序开发,需确保已安装适合操作系统的 SWF 版本。如果遇到 `org.eclipse.wb.swt.SWTResourceManager` 类找不到或使用不了 Display 的问题,则可能是由于未正确加载 SWT 库所致[^1]。 对于错误提示 “UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM”,这表明正在尝试在一个 64 位 Java 虚拟机上加载 32 位的本地库文件。解决办法是下载并配置当前使用的 JDK 架构相匹配(即同样为 64 位)的 SWT jar 文件。 #### 添加依赖到项目中 可以通过 Maven 或 Gradle 来管理依赖关系。这里给出一个简单的例子展示如何通过 Maven 引入 SWT: ```xml <dependency> <groupId>org.eclipse.swt</groupId> <artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId> <version>4.7</version> </dependency> ``` 注意替换 artifactId 中的操作系统名称以及版本号以适应具体环境需求[^3]。 #### 设置项目的编码方式 当处理不同平台上的文本数据时,可能会遭遇字符集兼容性的问题。因此建议统一设置整个工程默认采用 UTF-8 编码。进入 IDE 的设置页面,在 Editor -> File Encodings 下调整全局属性即可实现这一点[^2]。 #### 创建并测试SWT应用 创建一个新的 Java 类作为入口点,并编写一段简单代码用于验证 SWT 是否正常工作: ```java import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class Main { public static void main(String[] args){ Display display = new Display(); Shell shell = new Shell(display); shell.setText("Hello, SWT!"); shell.open(); while (!shell.isDisposed()){ if(!display.readAndDispatch()) display.sleep(); } display.dispose(); } } ``` 编译执行上述源码片段后应弹出一个小窗口显示 "Hello, SWT!" 字样,证明 SWT 已经成功集成到了 IntelliJ IDEA 当中。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值