展会信息港展会大全

JNI中文处理问题小结
来源:互联网   发布日期:2011-09-07 14:03:32   浏览:16398次  

导读: 如果你愿意,给JNIString再加个JNIString(JNIEnv* env, const wstring str)和一个operator =(const wstring rhs)操作符重载就比较完美了,:),很简单,留给用得到的朋友自己加吧。 下面是一个使用该类的例子(真正跟用于演示的code很少,大部分都是些routine...

  如果你愿意,给JNIString再加个JNIString(JNIEnv* env, const wstring& str)和一个operator =(const wstring& rhs)操作符重载就比较完美了,:),很简单,留给用得到的朋友自己加吧。

  下面是一个使用该类的例子(真正跟用于演示的code很少,大部分都是些routine code,:)):

#include <iostream>
#include <string>
#include <assert.h>
#include <jni.h>
using namespace std;
int main() {
  int res;
  JavaVM* jvm;
  JNIEnv* env;
  JavaVMInitArgs vm_args;
  JavaVMOption options[3];
  options[0].optionString = "-Djava.compiler=NONE";
  options[1].optionString = "-Djava.class.path=.;.."; // .. is specially for this project
  options[2].optionString = "-verbose:jni";
  vm_args.version = JNI_VERSION_1_4;
  vm_args.nOptions = 3;
  vm_args.options = options;
  vm_args.ignoreUnrecognized = JNI_TRUE;
  res = JNI_CreateJavaVM (& jvm, (void* * )& env, & vm_args);
  if (res < 0) {
    fprintf (stderr, "Can''t create Java VM
");
    return 1;
  }
  jclass cls = env->FindClass ("jni/test/Demo");
  assert (0 != cls);
  jmethodID mid = env->GetMethodID (cls, "", "(Ljava/lang/String;)V");
  assert (0 != mid);
  wchar_t* p = L"中国";
  jobject obj = env->NewObject (cls, mid, env->NewString (reinterpret_cast (p), wcslen (p)));
  assert (0 != obj);
  mid = env->GetMethodID (cls, "getMessage", "()Ljava/lang/String;");
  assert (0 != mid);
  jstring str = (jstring)env->CallObjectMethod (obj, mid);
  // use JNIString for easier handling.
  JNIString jnistr (env, str);
  cout << "JNIString:" << jnistr.GetString () << endl;
  jnistr = "中文";
  cout << jnistr.GetString () << endl;
  jvm->DestroyJavaVM ();
  fprintf (stdout, "Java VM destory.
");
  return 0;
}

赞助本站

相关热词: 中文处 理问 题小

相关内容
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港