从QT/C调用自己的非静态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

我试图从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 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";
}