Java 如何在mac64位cocoa环境下获得SWT控制的句柄?
我有一个基于Eclipse的RCP应用程序,其中我需要将SWT控制句柄传递给本机代码,以便在其上绘制一些东西。 我有以下代码来获取任何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)
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(视图)?我认为两者应该是相同的。如果您的代码要在所有平台上运行,请坚持使用反射。