我最近遇到了我的 Eclipse SWT GUI 应用程序的问题。我试图使用以下代码获取窗口句柄:
Display.getDefault().syncExec(()->{
handle = Display.getDefault().getActiveShell().handle;
});
在我的 64 位 Windows 10 操作系统上完美运行。
然后,当我在 32 位 Windows 机器(我使用 Hyper-v 在我的电脑上设置的 VM)上部署相同的应用程序时,我收到以下奇怪的错误:
java.lang.NoSuchFieldError: handle
此句柄的文档说:
长 org.eclipse.swt.widgets.Control.handle
操作系统资源的句柄(警告:此字段取决于平台)
重要提示:此字段不是 SWTpublic API 的一部分。它仅被标记为公共,以便它可以在 SWT 提供的包中共享。它并非在所有平台上都可用,并且永远不应该从应用程序代码中访问。
这可能是导致此问题的原因吗?
如果我们不能使用这个属性,还有什么替代方法?我知道 JNI / JNA 处理本机代码,据我所知,它们仍然依赖 SWT 实现来获取句柄。
感谢您花时间回答我的问题!
干杯!