本文整理汇总了C++中JObject::call方法的典型用法代码示例。如果您正苦于以下问题:C++ JObject::call方法的具体用法?C++ JObject::call怎么用?C++ JObject::call使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JObject
的用法示例。
在下文中一共展示了JObject::call方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: registerNativeMethods
void JClass::registerNativeMethods(const QList<JNativeMethod>& m)
{
if (m.isEmpty())
return;
JNINativeMethod* nm = new JNINativeMethod[m.size()];
for (int i = 0; i < m.size(); i++)
nm[i] = m[i].toStruct();
JNIEnv* env = *JVM::instance();
env->RegisterNatives(m_class, nm, m.size());
delete [] nm;
JObject ex = env->ExceptionOccurred();
if (!ex.isNull())
{
env->ExceptionClear();
ex.call("printStackTrace");
QString message = ex.call("getMessage", JSignature().retString()).toString();
QString className = ex.getClass().getClassName();
throw JException(message, className, ex);
}
}
示例2: load
void SettingsJavaPluginForm::load()
{
treeInstalled->clear();
treeAvailable->clear();
treeUpdates->clear();
m_availablePlugins.clear();
QMap<QString,QString> packages = JVM::instance()->getPackageVersions();
connect(m_network, SIGNAL(finished(QNetworkReply*)), this, SLOT(finished(QNetworkReply*)));
m_network->get(QNetworkRequest(QUrl(UPDATE_URL + "Index?version=" + VERSION)));
m_installedPlugins = JVM::instance()->getPackageVersions();
loadInstalled();
treeInstalled->header()->resizeSection(0, 200);
treeAvailable->header()->resizeSection(0, 200);
treeUpdates->header()->resizeSection(0, 200);
JObject runtime = JClass("java.lang.Runtime").callStatic("getRuntime", JSignature().ret("java.lang.Runtime")).value<JObject>();
labelJavaHeap->setText(QString("Java heap: %1 kB, %2 kB free")
.arg(runtime.call("totalMemory", JSignature().retLong()).toLongLong()/1024)
.arg(runtime.call("freeMemory", JSignature().retLong()).toLongLong()/1024));
checkAutoCheck->setChecked(getSettingsValue("java/check_updates").toBool());
}
示例3: globalInit
void JavaUpload::globalInit()
{
if (!JVM::JVMAvailable())
return;
// locate Java plugins
try
{
JUploadPlugin::registerNatives();
JClass helper("info.dolezel.fatrat.plugins.helpers.NativeHelpers");
JClass annotation("info.dolezel.fatrat.plugins.annotations.UploadPluginInfo");
JClass annConfigDialog("info.dolezel.fatrat.plugins.annotations.ConfigDialog");
QList<QVariant> args;
args << "info.dolezel.fatrat.plugins" << annotation.toVariant();
JArray arr = helper.callStatic("findAnnotatedClasses",
JSignature().addString().add("java.lang.Class").retA("java.lang.Class"),
args).value<JArray>();
qDebug() << "Found" << arr.size() << "annotated classes (UploadPluginInfo)";
int classes = arr.size();
for (int i = 0; i < classes; i++)
{
try
{
JClass obj = (jobject) arr.getObject(i);
JObject ann = obj.getAnnotation(annotation);
QString name = ann.call("name", JSignature().retString()).toString();
QString clsName = obj.getClassName();
JObject instance(obj, JSignature());
qDebug() << "Class name:" << clsName;
qDebug() << "Name:" << name;
JObject cfgDlg = obj.getAnnotation(annConfigDialog);
JavaEngine e = { "EXT - " + name.toStdString(), clsName.toStdString() };
if (!cfgDlg.isNull())
e.configDialog = cfgDlg.call("value", JSignature().retString()).toString();
if (instance.instanceOf("info.dolezel.fatrat.plugins.extra.URLAcceptableFilter"))
e.ownAcceptable = instance;
if (instance.instanceOf("info.dolezel.fatrat.plugins.listeners.ConfigListener"))
g_configListeners << instance;
m_engines[clsName] = e;
qDebug() << "createInstance of " << clsName;
EngineEntry entry;
entry.longName = m_engines[clsName].name.c_str();
entry.shortName = m_engines[clsName].shortName.c_str();
entry.lpfnAcceptable2 = JavaUpload::acceptable;
entry.lpfnCreate2 = JavaUpload::createInstance;
entry.lpfnInit = 0;
entry.lpfnExit = 0;
entry.lpfnMultiOptions = 0;
addTransferClass(entry, Transfer::Upload);
}
catch (const RuntimeException& e)
{
qDebug() << e.what();
}
}
}
catch (const RuntimeException& e)
{
qDebug() << e.what();
}
}
示例4: globalInit
void JavaExtractor::globalInit()
{
try {
JClass helper("info.dolezel.fatrat.plugins.helpers.NativeHelpers");
JClass annotation("info.dolezel.fatrat.plugins.annotations.ExtractorPluginInfo");
JExtractorPlugin::registerNatives();
JArgs args;
args << "info.dolezel.fatrat.plugins" << annotation.toVariant();
JArray arr = helper.callStatic("findAnnotatedClasses",
JSignature().addString().add("java.lang.Class").retA("java.lang.Class"),
args).value<JArray>();
qDebug() << "Found" << arr.size() << "annotated classes (ExtractorPluginInfo)";
int classes = arr.size();
for (int i = 0; i < classes; i++)
{
try
{
JClass obj = (jobject) arr.getObject(i);
JObject ann = obj.getAnnotation(annotation);
QString regexp = ann.call("regexp", JSignature().retString()).toString();
QString name = ann.call("name", JSignature().retString()).toString();
QString targetClassName = ann.call("transferClassName", JSignature().retString()).toString();
QString clsName = obj.getClassName();
JObject instance(obj, JSignature());
if (targetClassName.isEmpty())
{
JClass cls = JClass(ann.call("transferClass", JSignature().ret("java.lang.Class")).value<JObject>());
if (!cls.isNull() && cls.getClassName() != "java.lang.Object")
targetClassName = cls.getClassName();
}
qDebug() << "Class name:" << clsName;
qDebug() << "Name:" << name;
qDebug() << "Regexp:" << regexp;
JavaEngine e = { "EXT - " + name.toStdString(), clsName.toStdString(), QRegExp(regexp) };
if (instance.instanceOf("info.dolezel.fatrat.plugins.extra.URLAcceptableFilter"))
e.ownAcceptable = instance;
if (instance.instanceOf("info.dolezel.fatrat.plugins.listeners.ConfigListener"))
g_configListeners << instance;
e.targetClass = targetClassName;
m_engines[clsName] = e;
EngineEntry entry;
entry.longName = m_engines[clsName].name.c_str();
entry.shortName = m_engines[clsName].shortName.c_str();
entry.lpfnAcceptable2 = JavaExtractor::acceptable;
entry.lpfnCreate2 = JavaExtractor::createInstance;
entry.lpfnInit = 0;
entry.lpfnExit = 0;
entry.lpfnMultiOptions = 0;
addTransferClass(entry, Transfer::Download);
}
catch (const RuntimeException& e)
{
qDebug() << e.what();
}
}
}
catch (const RuntimeException& e)
{
qDebug() << e.what();
}
}
示例5: callStatic
QVariant JClass::callStatic(const char* name, const char* sig, QList<QVariant> args)
{
JScope s;
JNIEnv* env = *JVM::instance();
jmethodID mid = env->GetStaticMethodID(m_class, name, sig);
if (!mid)
throw RuntimeException(QObject::tr("Method %1 %2 not found").arg(name).arg(sig));
JValue vals[args.size()];
jvalue jargs[args.size()];
for(int i=0;i<args.size();i++)
{
vals[i] = variantToValue(args[i]);
jargs[i] = vals[i];
}
const char* rvtype = strchr(sig, ')');
if (!rvtype)
throw RuntimeException(QObject::tr("Invalid method return type").arg(name).arg(sig));
rvtype++;
QVariant retval;
switch (*rvtype)
{
case 'V':
env->CallStaticVoidMethodA(m_class, mid, jargs);
break;
case '[':
{
jobject obj = env->CallStaticObjectMethodA(m_class, mid, jargs);
retval.setValue<JArray>(JArray(obj));
break;
}
case 'L':
{
jclass string_class = env->FindClass("java/lang/String");
jobject obj = env->CallStaticObjectMethodA(m_class, mid, jargs);
if (obj && env->IsInstanceOf(obj, string_class) && !strcmp(rvtype+1, "java/lang/String;"))
retval = JString(jstring(obj)).str();
else
{
QVariant var;
var.setValue<JObject>(JObject(obj));
retval = var;
}
break;
}
case 'Z':
retval = (bool) env->CallStaticBooleanMethodA(m_class, mid, jargs);
break;
case 'B':
retval = env->CallStaticByteMethodA(m_class, mid, jargs);
break;
case 'C':
retval = env->CallStaticCharMethodA(m_class, mid, jargs);
break;
case 'S':
retval = env->CallStaticShortMethodA(m_class, mid, jargs);
break;
case 'I':
retval = env->CallStaticIntMethodA(m_class, mid, jargs);
break;
case 'J':
retval = (qlonglong) env->CallStaticLongMethodA(m_class, mid, jargs);
break;
case 'F':
retval = env->CallStaticFloatMethodA(m_class, mid, jargs);
break;
case 'D':
retval = env->CallStaticDoubleMethodA(m_class, mid, jargs);
break;
default:
throw RuntimeException(QObject::tr("Unknown Java data type: %1").arg(*rvtype));
}
JObject ex = env->ExceptionOccurred();
if (!ex.isNull())
{
env->ExceptionClear();
ex.call("printStackTrace");
QString message = ex.call("getMessage", JSignature().retString()).toString();
QString className = ex.getClass().getClassName();
throw JException(message, className, ex);
}
return retval;
}