用C加载虚拟机,FindClass()一直为NULL。这找不到还怎么玩啊。于是上网搜索,试了各种办法并没成功。
FindClass()的类名字串,分隔符应该是/,这个不多说。
后来看到别人的代码写法跟自己不一样,于是改了一下,正确了。原因也明白了。
错误
char buffer[128] = {0}; sprintf(buffer, "-Djava.class.path=%s", jar); options[0].optionString = buffer; ....
这个buffer是临时变量,传递过去之后,函数调用结束就释放了,使用时就出错了。吾以为会自行复制,实际上没有。
正确
options[0].optionString = strdup(buffer);
通过strdup()复制一份,因为是malloc的,只要不释放就能用。