jni-AndroidJNI如何在线程中调用java的非静态方法

问题描述

AndroidJNI如何在线程中调用java的非静态方法

我最近在使用Android里的JNI,我发现只要调用的是GetStaticMethodID,无论是用CallVoidMethod还是CallStaticVoidMethod,都可以正常调用JAVA里的静态方法,这是为什么?
还有,在C 中,非主线程中,我用过AttachCurrentThread,可调用静太的JAVA方法,但无法使用非静态的方法,是我使用错了吗?

解决方案

无论是用CallVoidMethod还是CallStaticVoidMethod,都可以正常调用JAVA里的静态方法,这是为什么?
A:这个我觉得是不可能的
还有,在C 中,非主线程中,我用过AttachCurrentThread,可调用静太的JAVA方法,但无法使用非静态的方法,是我使用错了吗?
A:都可以调用,只是调用方法不同,静态方法需要类型名,而成员方法需要实例名
(*useEnv)->CallStaticVoidMethod(useEnv, mJniclass, mMethodID, len); // mJniClass是类名
(*env)->CallVoidMethod(env,obj,mMethodID,fileId);//obj是类的实例化对象

时间: 2024-09-17 13:57:27

jni-AndroidJNI如何在线程中调用java的非静态方法的相关文章

crossapp在线程中调用java代码toast,为何显示不了

问题描述 我在CA中用C++创建了一个新线程,然后通过jni去调用java的代码显示toast public static void showToast(final String strContent) { Message msg = new Message(); msg.what = Cocos2dxHandler.HANDLER_SHOW_TOAST; msg.obj = new Cocos2dxHandler.ShowToastMessage(strContent); sCocos2dxA

如何在C/C++中调用Java

java跨平台的特性使Java越来越受开发人员的欢迎,但也往往会听到不少的抱怨:用Java开发的图形用户窗口界面每次在启动的时候都会跳出一个控制台窗口,这个控制台窗口让本来非常棒的界面失色不少.怎么能够让通过Java开发的GUI程序不弹出Java的控制台窗口呢?其实现在很多流行的开发环境例如JBuilder.Eclipse都是使用纯Java开发的集成环境.这些集成环境启动的时候并不会打开一个命令窗口,因为它使用了JNI(Java Native Interface)的技术.通过这种技术,开发人员不

在asp/asp.net中调用java写的类

asp.net|asp.net 在开发过程中偶尔会遇到要在ASP/ASP.Net中调用JAVA写的类,以实现之前已经用JAVA实现的功能,下面就以一个简单示例说明详细的使用方法: 1.创建java文件:使用任何你喜欢的编辑器编辑以下内容:public class hello{ public String helloWorld(String s) { if(s == null) return ""; else return s; }}将此文件保存为hello.java 2.编译java文

实用技巧:PHP中调用Java类的两种方法

Java语言功能强大,因此在许多情况下在php中来调用Java的功能将十分有用.在php中调用Java语言有两种方法,一种是使用php中的Java扩展模块,另一种是使用minij2ee应用服务器提供的SJOP协议实现.下面我们来比较一下这两种方法各自的特点. 1.php的Java模块 php发布版中包含一个Java扩展模块,可以用来调用Java对象,例如: <?php$system=new Java("java.lang.System");print "Java ver

如何在Oracle存储过程中调用Java方法

存储过程中调用Java程序段 软件环境: 1.操作系统:Windows 2000 Server 2.数 据 库:Oracle 8i R2 (8.1.7) for NT 企业版 3.安装路径:C:\ORACLE 实现方法: 1.创建一个文件为Test.java public class Test { public static void main(String args[]) { System.out.println("HELLO THIS iS A Java PROCEDURE"):

图片-jsp中调用java方法,方法中文件路径问题

问题描述 jsp中调用java方法,方法中文件路径问题 我在jsp中了写了java代码调用java类的方法,方法中需要在网页下载一张图片保存 OutputStream os = new FileOutputStream(new File("identityCode/checkimage.JPEG")); 我这样写的,然后一直报 :系统找不到文件路径.路径各种都换了 还是不行 解决方案 解决JSP路径问题的方法jsp路径问题解决方法jsp调用js文件中文乱码问题解决方法 解决方案二: 试

sql server-如何在SQL Server 数据库中调用JAVA程序

问题描述 如何在SQL Server 数据库中调用JAVA程序 工作中 遇到一个实际的问题如下: 一个在线的SQL server数据库A,他的一个触发器在数据库有更新时把新的数据插入的到另一个SQL server 数据库B,已经写好的一个JAVA程序可以把B中的数据全部复制到一个Oracle 数据库C中,并且立即把数据库B中的数据清空.现在希望这个程序能够自动执行,就是JAVA程序能够在检测到B中有新数据后立即开始自动执行.我已经知道对于Oracle数据库可以通过触发器直接调用JAVA程序,可是

.bat中调用java程序,且得到java的输出(system.out.println)内容

问题描述 如题:在.bat中调用java程序,且得到java的输出(system.out.println)内容.我要在bat中执行"java-jarxxx.jar"并且用一个变量保存jar运行后的输出结果,jar中要么输出(system.out.println)0要么输出1,并且对结果进行判断如果变量值为0(注:变量的值是由jar运行产生的)则使用exit/B0退出,如果变量值1则使用exit/B1退出linux版的.sh代码如下:var=`java-jarxxxxx.jar${use

JRuby中调用java带可变参数的方法

今天同事遇到的问题,用JRuby调用一个java方法,该方法使用了jdk1.5的可变参数.我一开始以为只要简单地将可变参数表示为数组即可,例如下面的两个java类: public class Echo{ public void echo(String name){ System.out.println(name); } } public class Test{ public void hello(String name,Echoargs){ System.out.println("hello,&