FindClass 找不到类

(>^ω^<)喵上树 2014-08-25 04:40:27
c++ 调用 java

编译环境 linux Ubuntu13.10
JDK 信息

root@master:/usr/java# echo $JAVA_HOME
/usr/java/jdk1.7.0_65

root@master:/usr/java# echo $CLASSPATH
.:/usr/java/jdk1.7.0_65/lib:/usr/java/jdk1.7.0_65/jre/lib:

root@master:/# echo $JAR_HOME
/usr/java/jdk1.7.0_65/jre

root@master:/# echo $PATH
/usr/java/jdk1.7.0_65/bin:/usr/java/jdk1.7.0_65/jre/bin
[code=c]

在home目录下建议个com目录,然后再在com目录下建一个test目录
[code=c]
root@master:/home/com/test# pwd
/home/com/test


编写一个java程序

root@master:/home/com/test# cat MyAdd.java
package com.test;
public class MyAdd.j{
public static int add(int a, int b)
{
return a+b;
}
}
root@master:/home/com/test# javac MyAdd.java
root@master:/home/com/test# ls
MyAdd.class MyAdd.java


这里需要用javah生成 MyAdd.h文件吗?

然后写一个test.cpp 文件

#include <jni.h>
#include <stdio.h>

int main()
{
JavaVM * jvm = (JavaVM *)0;
JNIEnv * env = (JNIEnv *)0;
JavaVMInitArgs vm_args;
long status;
jclass cls;
jmethodID mid;
jint square;
jboolean jnot;
jobject jobj;

vm_args.version = JNI_VERSION_1_6;

vm_args.options = (JavaVMOption *)0;
vm_args.ignoreUnrecognized = JNI_FALSE;

status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if(status != JNI_ERR)
{
cls = env->FindClass("com/test/MyAdd");
if(cls != 0)
{
printf("find java class success\n");


mid = env->GetMethodID(cls, "<init>", "(V)");
if(mid != 0)
{
jobj = env->NewObject(cls, mid);
printf("init ok!\n");
}

// 调用add函数
mid = env->GetStaticMethodID(cls, "add", "(II)I");
if(mid != 0)
{
square = env->CallStaticIntMethod(cls, mid, 5, 5);
printf("square :%d\n", square);
}
}
else
{
fprintf(stderr, "FindClass failed!\n");
}

jvm->DestroyJavaVM();
fprintf(stdout, "Java VM destry!\n");
return 0;
}
else
{
printf("create java jvm fail\n");
return -1;
}
}



编译

root@master:/home/com/test# cat make.sh
g++ -o test \
-I/usr/java/jdk1.7.0_65/include \
-I/usr/java/jdk1.7.0_65/include/linux \
-L/usr/bin/java \
-L/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/serve test.cpp -ljvm

root@master:/home/com/test# ls
MyAdd.class MyAdd.java make.sh test test.cpp
root@master:/home/com/test# ./test
FindClass failed!
Java VM destry!


没有找到那个类?求指定。。。。
...全文
357 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
伊顺鸣 2014-08-26
  • 打赏
  • 举报
回复
是这样的啊。。。
fireyou 2014-08-26
  • 打赏
  • 举报
回复
public class MyAdd.j 类名是MyAdd.j 类名不要有带点。。 public class后面跟的就是类名
媒体盒子 2014-08-26
  • 打赏
  • 举报
回复
你的类名是MyAdd.j 不是 MyAdd
(>^ω^<)喵上树 2014-08-26
  • 打赏
  • 举报
回复
导入第三方包

import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.hbase.HBaseConfiguration;  
import org.apache.hadoop.hbase.HColumnDescriptor;  
import org.apache.hadoop.hbase.HTableDescriptor;  
import org.apache.hadoop.hbase.KeyValue;  
import org.apache.hadoop.hbase.client.HBaseAdmin;  
import org.apache.hadoop.hbase.client.HTable;  
import org.apache.hadoop.hbase.client.Result;  
import org.apache.hadoop.hbase.client.ResultScanner;  
import org.apache.hadoop.hbase.client.Scan;  
import org.apache.hadoop.hbase.io.BatchUpdate; 

//...............................

这些包的位置在 /home/hbase/bin 目录下

[root@wangxin hbase_c2java]# javac -cp /home/hbase/lib/*.jar  HBase_c2java.java      
javac: invalid flag: /home/hbase/lib/aopalliance-1.0.jar
Usage: javac <options> <source files>
use -help for a list of possible options
这么做是哪里问题?
(>^ω^<)喵上树 2014-08-26
  • 打赏
  • 举报
回复
centos下安装HBase后。 在 /home/hbae目录下 /etc/profile 中的配置 export HBASE_HOME="/home/hbase" export PATH=$HBASE_HOME/bin:$PATH 写代码的时候要 import org.apache.hadoop.hbase.client.HTable; 但是报错 error: package org.apache.hadoop.hbase.client does not exist import org.apache.hadoop.hbase.client.HTable; 这么import导入的时候从什么地方开始寻找org目录的? ^
(>^ω^<)喵上树 2014-08-26
  • 打赏
  • 举报
回复
引用 1 楼 luowenlong860502 的回复:
你的类名是MyAdd.j 不是 MyAdd
这里是个笔误。。。 这个问题已解决!!!!

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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