Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NoSuchFieldError:句柄_Java_Eclipse_Swt_Window Handles_Nosuchfieldexception - Fatal编程技术网

java.lang.NoSuchFieldError:句柄

java.lang.NoSuchFieldError:句柄,java,eclipse,swt,window-handles,nosuchfieldexception,Java,Eclipse,Swt,Window Handles,Nosuchfieldexception,我最近在EclipseSWTGUI应用程序中遇到了一个问题。我试图用以下代码获取窗口句柄: Display.getDefault().syncExec(()->{ handle = Display.getDefault().getActiveShell().handle; }); 在我的64位Windows 10操作系统上运行良好 然后,当我在32位Windows机器上部署相同的应用程序(我在pc上使用Hyper-v设置的VM)时,会出现以下奇怪的

我最近在EclipseSWTGUI应用程序中遇到了一个问题。我试图用以下代码获取窗口句柄:

Display.getDefault().syncExec(()->{
            handle = Display.getDefault().getActiveShell().handle;
        });
在我的64位Windows 10操作系统上运行良好

然后,当我在32位Windows机器上部署相同的应用程序(我在pc上使用Hyper-v设置的VM)时,会出现以下奇怪的错误:

java.lang.NoSuchFieldError: handle
此句柄的文档说明:

long org.eclipse.swt.widgets.Control.handle

操作系统资源的句柄(警告:此字段取决于平台)

重要提示:此字段不是SWTpublic API的一部分。它被标记为public,这样它就可以在SWT提供的包中>共享。它不是在所有平台上都可用,并且永远不应从应用程序代码>访问

这可能是导致这个问题的原因吗

如果我们不能使用这个属性,有什么选择?我知道JNI/JNA处理本机代码,据我所知,它们仍然依赖SWT实现来获取句柄

谢谢你花时间回答我的问题


干杯

我本以为Javadoc会把情况说得非常清楚。不应使用SWT内部构件,它们在每个平台上完全不同(可能包括同一操作系统上的32/64位版本),甚至可能在不同版本之间发生变化

32位版本的Windows SWT确实有一个
句柄
字段,但在64位版本中它是
int
而不是
long
,这就是导致此错误的原因。其他平台的SWT根本没有
句柄
字段

如果您真的必须访问这样的内容,那么您必须编写特定于每个平台/窗口系统/体系结构的代码。对于Eclipse插件,这可以通过平台特定的片段来完成。我想对于这种特殊情况,您也可以使用反射来查找int和long“handle”字段

还要注意,当前版本的Eclipse不再支持32位