Java 如何在mac64位cocoa环境下获得SWT控制的句柄?

Java 如何在mac64位cocoa环境下获得SWT控制的句柄?,java,macos,cocoa,swt,Java,Macos,Cocoa,Swt,我有一个基于Eclipse的RCP应用程序,其中我需要将SWT控制句柄传递给本机代码,以便在其上绘制一些东西。 我有以下代码来获取任何SWT控件的句柄: public static int getControlHandle(Control c){ int handle = 0; try { if(_isMACOS){ if(_viewField== null)

我有一个基于Eclipse的RCP应用程序,其中我需要将SWT控制句柄传递给本机代码,以便在其上绘制一些东西。 我有以下代码来获取任何SWT控件的句柄:

public static int getControlHandle(Control c){
            int handle = 0;
            try {
                if(_isMACOS){
                    if(_viewField== null)
                        _viewField = Control.class.getDeclaredField("view");
                    Object view = _viewField.get(c);
                    if(_idField== null) {
                        Class<?>idClass = Class.forName("org.eclipse.swt.internal.cocoa.id");
                        _idField = idClass.getDeclaredField("id");
                    }
                    handle = _idField.getInt(view);

                }
                else {
                    if(_idField== null)
                        _idField = Control.class.getDeclaredField("handle");
                    handle = _idField.getInt(c);
                }
            }
            catch(Exception e){

            }
            return handle;
    }
公共静态int getControlHandle(控件c){
int handle=0;
试一试{
如果(_isMACOS){
如果(_viewField==null)
_viewField=Control.class.getDeclaredField(“视图”);
对象视图=_viewField.get(c);
如果(_idField==null){
ClassicClass=Class.forName(“org.eclipse.swt.internal.cocoa.id”);
_idField=idClass.getDeclaredField(“id”);
}
handle=\u idField.getInt(视图);
}
否则{
如果(_idField==null)
_idField=Control.class.getDeclaredField(“句柄”);
handle=\u idField.getInt(c);
}
}
捕获(例外e){
}
返回手柄;
}
\u viewField
\u idField
java.lang.reflect.Field

虽然这对Windows和Mac 32位运行良好,但对Mac 64位cocoa LIB和env不起作用。
获取64位Mac的句柄的方式是否有任何更改?

在Cocoa 64位上,
id
值是一个
long
而不是
int

谢谢。是的,我刚刚发现我可以通过control.view.id获取id,它的类型是long。这是在64位env中获取它的正确方法,还是我应该使用_idField.getLong(视图)代替_idField.getInt(视图)?我认为两者应该是相同的。如果您的代码要在所有平台上运行,请坚持使用反射。