2010-06-07 80 views
1

我想使用Javafx反射API从Java访问静态JavaFX类成员。如何从Java访问JavaFX 1.3静态类成员?

E.g. JavaFX代码:

public var thing; 

class MyJavaFXClass { 
} 

Java代码:

private Object getThing() { 
    FXClassType classType = FXContext.getInstance().findClass("mypackage.MyJavaFXClass"); 

    // Get static member 'thing' from 'MyJavaFXClass' 
    // <Insert Code Here> 

    return thing; 
} 

什么Java代码,我需要访问 'MyJavaFXClass.thing'?

注意:我正在使用JavaFX 1.3 - 我不确定反射API与此前的JavaFX版本是否不同。

回答

1
FXClassType classType = FXContext.getInstance().findClass("mypackage.MyJavaFXClass"); 
FXVarMember var = classType.getVariable("thing"); 
FXValue value = var.getValue(null); 
System.out.println(value.getValueString()); 

或者如果你想要的对象,而不是字符串。

FXLocal.Value value = (FXLocal.Value)var.getValue(null); 
Object obj = value.asObject(); 
System.out.println(obj); 
+0

谢谢吉姆,那很完美。 offtopic:顺便说一下,我想感谢您解决如何将JavaFX 1.3场景嵌入到Swing应用程序中 - 为我节省了过多的头痛! – James 2010-06-11 00:58:24

0

你的“MyJavaFXClass”应该实现一个接口IF。 接口IF应该定义至少一个返回“var thing”类型的方法。 然后,您的“MyJavaFXClass”必须使用“class MyJavaFXClass extends IF”实现接口。

要从Java代码访问您的“事物”,首先将对象转换为IF,然后调用该方法。