首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从QT/C++调用自己的非静态java方法

从QT/C++调用自己的非静态java方法
EN

Stack Overflow用户
提问于 2018-02-20 11:22:28
回答 1查看 893关注 0票数 0

我试图从QT/C++调用我自己Java类的非静态方法callNative,但是我得到了以下错误:

W System.err: java.lang.NoSuchMethodError:无非静态方法

以下是java类的代码:

代码语言:javascript
复制
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++代码指.h

代码语言:javascript
复制
#ifndef FINGER_H
#define FINGER_H

#include <QObject>

class finger : public QObject
{
    Q_OBJECT
public:
    explicit finger(QObject *parent = nullptr);
    Q_INVOKABLE void call_java();
signals:

public slots:
};

#endif // FINGER_H

finger.cpp:

代码语言:javascript
复制
#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";
}

main.cpp:

代码语言:javascript
复制
#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();
    }

而qml:

代码语言:javascript
复制
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()
        }
    }
}

你知道我为什么得到java.lang.NoSuchMethodError吗?

EN

回答 1

Stack Overflow用户

发布于 2018-02-21 08:50:15

最后,我找到了一个解决方案:我改变了方法:

代码语言:javascript
复制
void finger::call_java()
{
    qDebug()<< "call java";
    QtAndroid::androidActivity().callObjectMethod("callNative","()V;");
    qDebug()<< "called java";
}

在……里面

代码语言:javascript
复制
void finger::call_java()
{
    qDebug()<< "call java";
    QtAndroid::runOnAndroidThread([]{
        QAndroidJniObject myJavaObject("com/ieio/finger/Finger");
        myJavaObject.callMethod<void>("callNative","()V");
    });
    qDebug()<< "called java";
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48884183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档