小弟在使用JNI调用JAVA的CLASS的时候,循环自己的话,程序会莫名奇妙的死掉?是什么资源没释放吗?
源代码如下:
        iniJVM();
        tempParam := '(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;'
                    +'Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;'
                    +'Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;';                      
        MID := TENV.GetStaticMethodID(CID, 'sendMessage',PChar(tempParam));
        if (TENV.ExceptionOccurred<>nil) then
        begin
          LogWrite('ErrInfo:找不到方法!');
          //Continue;
        end;
        
        TMP := TENV.StringToJString(PChar(UTF8Encode(tempQuery.FieldByName('MESSAGE_CONTENT').AsString)));
        TMP := TENV.CallStaticObjectMethod(CID, MID, [SGIP_GATEWAY_ADDRESS,SGIP_GATEWAY_PORT,SGIP_GATEWAY_USERNAME,SGIP_GATEWAY_PASSWORD,
                                                      G_SHORT_NUMBER,SGIP_CHARGE_NUMBER,
                                                      tempQuery.FieldByName('MOBILE_NUMBER').AsString,TMP]);
        if (TENV.ExceptionOccurred()<>nil) then
        begin
          LogWrite('ErrInfo:调用方法失败!');
          //Continue;
        end;

解决方案 »

  1.   

    据说JAVA的命名方法很严格,必须按照那个标准写
      

  2.   

    现在已经实现了一部分:  
    delphi调用的java的类,该类是独立的,比如
    public class DelphiCallJava {
    public static String dTest(String args) {
    if (args == null) {
    return "您没有输入参数!";
    } else {
    return "您输入的参数:" + args;
    }
    }
    生成一个类A;==================
    但是,当在A类中调用了B类的方法时,再通过delphi调用A类中的方法,能找到类,能找到方法,可调用方法时报错了;请问有没有大侠遇到过这种情况?该例子,在[email protected] 密码:delphi 里《delphi调用java类,包》,请高手看一下
      

  3.   

    楼主的问题解决了吗?
    我也在用jni调用java类,跟你请教个问题吧?
      

  4.   

    循环自己那不死能行吗,调用java的class命名必须这样:如: core\com\ecdb\core\util\ECThree.java 文件里有方法 fnCheckKey在 delphi 中必须定义为 Java_com_ecdb_core_util_ECThree_fnCheckKey 才可调用java的class
      

  5.   

    补充下 
    java中定义 public static boolean fnCheckKey(String AsKey, String AsYZM)delphi 中
    function Java_com_ecdb_core_util_ECThree_fnCheckKey(PEnv: PJNIEnv; Obj: JObject; AsKey, AsYZM: JString): JBoolean;