从QT/C调用自己的非静态java方法++
我试图从QT/C++调用我自己的Java类的非静态方法callNative,但出现以下错误: W System.err:java.lang.NoSuchMethodError:no非静态方法Lorg/qtproject/qt5/android/bindings/QtActivity;。callNativeV 下面是java类的代码:从QT/C调用自己的非静态java方法++,java,android,qt,java-native-interface,Java,Android,Qt,Java Native Interface,我试图从QT/C++调用我自己的Java类的非静态方法callNative,但出现以下错误: W System.err:java.lang.NoSuchMethodError:no非静态方法Lorg/qtproject/qt5/android/bindings/QtActivity;。callNativeV 下面是java类的代码: package com.ieio.finger; import static java.lang.System.out; public class Finge
package com.ieio.finger;
import static java.lang.System.out;
public class Finger extends org.qtproject.qt5.android.bindings.QtActivity {
public void callNative()
{
System.out.println("I am in Java");
}
}
这里的C++代码 手指
知道我为什么得到java.lang.NoSuchMethodError吗?最终我找到了一个解决方案: 我改变了方法:
void finger::call_java()
{
qDebug()<< "call java";
QtAndroid::androidActivity().callObjectMethod("callNative","()V;");
qDebug()<< "called java";
}
在
我不这样认为,在链接中,您建议所有Java函数都是静态的。V后面的分号不属于那里。是的,对,这是一个错误
#include <QtAndroidExtras/QAndroidJniObject>
#include <QtAndroidExtras/QtAndroid>
#include "finger.h"
finger::finger(QObject *parent) : QObject(parent)
{
}
void finger::call_java()
{
qDebug()<< "call java";
QtAndroid::androidActivity().callObjectMethod("callNative","()V;");
qDebug()<< "called java";
}
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <finger.h>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<finger>("io.qt.ieio.finger", 1, 0, "Finger");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
import io.qt.ieio.finger 1.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Finger
{
id:myFinger
}
Button {
id: button
x: 234
y: 284
text: qsTr("Button")
onClicked: {
myFinger.call_java()
}
}
}
void finger::call_java()
{
qDebug()<< "call java";
QtAndroid::androidActivity().callObjectMethod("callNative","()V;");
qDebug()<< "called java";
}
void finger::call_java()
{
qDebug()<< "call java";
QtAndroid::runOnAndroidThread([]{
QAndroidJniObject myJavaObject("com/ieio/finger/Finger");
myJavaObject.callMethod<void>("callNative","()V");
});
qDebug()<< "called java";
}