QT学习调用JAR的问题

牧牛童子 2017-08-05 12:18:42
初学,照搬网上示例。
test.java文件内容如下:
package test;
import java.io.PrintStream;

public class Test
{
public Test(int i)
{
System.out.println("Test实例化了!");
}

public static int fun1()
{
System.out.println("静态函数fun1执行了。");
return 11;
}
}

用jar cvf test.jar test.java 生成jar包。置于android\libs目录下。构建时也看到加载了test.jar的构建信息输出。

QT代码:
jint a = 2;
jint b = 4;
jint max=0;
max = QAndroidJniObject::callStaticMethod<jint>("java/lang/Math", "max", "(II)I", a, b); //系统标准函数,调用成功。
max = QAndroidJniObject::callStaticMethod<jint>("test/Test","fun1"); //调用失败。若正确,应该返回 11才对。

QString msg01=QString::fromStdString(int2string(max));
QMessageBox::information(NULL,"a+b=?",msg01);

问题1:自己的java测试类,如何写才是正确的,方能调用成功?我的错误在哪里?
问题2:QAndroidJniObject::callStaticMethod<jint>("java/lang/Math", "max", "(II)I", a, b); 中的 "(II)I" 代表什么意思?输入参数两个且为整型? 若输入参数再加一个string型,是不是应该是"(IIC)I"? (看网上说,整型用“I”标记。 )
问题3:QAndroidJniObject jartestObj("test/Test","(I)V",10); 见网上示例代码是这么写的,请问"(I)V"中的V代表什么?
谢谢。
...全文
841 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
牧牛童子 2017-08-11
  • 打赏
  • 举报
回复
几天了,没人来回复,我自己来回复吧。 http://bbs.csdn.net/topics/392209375
牧牛童子 2017-08-05
  • 打赏
  • 举报
回复
Java方法签名中特殊字符/字母含义 特殊字符 数据类型 特殊说明 V void 一般用于表示方法的返回值 Z boolean B byte C char S short I int J long F float D double [ 数组 以[开头,配合其他的特殊字符,表示对应数据类型的数组,几个[表示几维数组 L全类名; 引用类型 以L开头、;结尾,中间是引用类型的全类名
准备工作: 1.编译JnativeCpp 2.将编译出来的libJNativeCpp.so,拷贝到/usr/lib/,同时执行chmod 555 libJNativeCpp.so 测试过程简介 1.c测试库libtest.so 环境:ubuntu10.4下 语言:c 编译库名称为:libtest.so 涉及文件:so_test.h test_a.c test_b.c test_c.c 终端执行命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so 将编译得到到libtest.so拷贝到/usr/lib/,同时执行chmod 555 libtest.so 2.qt测试库libmylib.so 环境:ubuntu10.4下 语言:c 编译工具:qt Creator 编译库名称为:libmylib.so 将编译得到到libmylib.so拷贝到/usr/lib/,同时执行chmod 555 libmylib.so 3.编译环境安装 a.安装jdk 1.6 b.安装netBeans 6.8 c.创建javaApp工程 d.将JNative.jar添加到工程中 e.参考如下代码,编写后编译执行,并运行 import org.xvolks.jnative.JNative; import org.xvolks.jnative.Type; import org.xvolks.jnative.exceptions.NativeException; public class Main { public static void main(String[] args) throws NativeException, IllegalAccessException{ //纯c写到动态库 JNative clib = new JNative("libtest.so", "test_a"); //调用libtest.so下到test_a函数 clib.setRetVal(Type.STRING); //设置此函数的返回值 clib.invoke(); //函数执行 System.out.println(clib.getRetVal());//输出函数返回结果 //qt写到动态库 //以下部分使用qt编译到so,注意在函数声明前加 extern "C" //如extern "C" const char* getLocalHost(); JNative getstring = new JNative("libmylib.so", "getstring"); getstring.setRetVal(Type.STRING); getstring.invoke(); System.out.println(getstring.getRetVal()); } } 4.输出结果 this is in test_a... getstring hello .....

16,212

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧