Beispiel #1
0
void TJClassRef::setField(const std::string& fieldName, jobject value)
{
	JNIEnv* environment = TJGetEnvironment();
	if (environment == nullptr)
		throw TJNIException(kThreadDetached, "Failed to get jnienv in TJClassRef::setObjectField");

	if (value == nullptr)
		throw TJInvalidArgument("Null value in setField");

	TJClassRef classRef(environment->GetObjectClass(value), kLocalRef);

	jfieldID fieldDescriptor = environment->GetStaticFieldID(mHandle, fieldName.c_str(), classRef.descriptor().c_str());
	if (fieldDescriptor == nullptr)
		GenerateJavaException(environment, environment->ExceptionOccurred(), "GetStaticFieldID failed in TJClassRef::setObjectField");

	environment->SetStaticObjectField(mHandle, fieldDescriptor, value);
}
 std::shared_ptr<interface::IClass> createClass (Key&& _key)
 {
     typedef interface::IClass class_t;
     typedef interface::IObject object_t;
     typedef std::shared_ptr<class_t> classref_t;
     typedef std::shared_ptr<object_t> objectref_t;
     typedef object::NativeObject<T> object_impl;
     typedef object::ObjectClass<T> class_impl;
     
     static Hasher hasher;
     
     class_t* class_ptr = new class_impl;
     class_t& class_ref = *class_ptr;
     classref_t classRef (class_ptr);
     class_ref.self(classRef);
     class_ref.prototype(object_impl(T(), typename object_impl::silent_t()));
     class_ref.id(hasher(std::forward<Key>(_key)));
     return classRef;
 }