JNI中抛出异常
来源:互联网 发布:江汉大学网络课程入口 编辑:程序博客网 时间:2024/04/29 05:13
From: http://blog.csdn.net/sunnydogzhou/article/details/5564492
应用场景:
利用Java的JNI机制调用C写好的类库,现在需要在C的类库中抛出异常,然后在应用层即java上面捕获异常。
具体的实现形式如下
首先定义一个异常类
class NumberNotFounded extends Exception {
NumberNotFounded(){
super();
}
NumberNotFounded(String reason){
super(reason);
}
}
接着定义一个带有native方法的JNI类。
class ExceptionAccess{
public native int doit();
static {
System.load("/home/dianping/Peter/Exception/libExceptionAccess.so");
}
}
我们会在doit()中抛出异常。先用javah生成头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class ExceptionAccess */
#ifndef _Included_ExceptionAccess
#define _Included_ExceptionAccess
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: ExceptionAccess
* Method: doit
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_ExceptionAccess_doit
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
接着编写.c文件
#include "ExceptionAccess.h"
JNIEXPORT jint JNICALL Java_ExceptionAccess_doit
(JNIEnv * env, jobject obj)
{
jclass cls;
cls = ( *env)->FindClass(env,"NumberNotFounded");
if(cls == NULL){
return;
}
(*env)->ThrowNew(env,cls,"code from C");
}
编译之,记得编译的时候用 -I带上头文件的路径,不知道可以baidu之。
然后编写一个测试的类
import java.io.*;
class caller {
public static void main(String args[]) {
ExceptionAccess EA = new ExceptionAccess();
try
{
EA.doit();
}catch (Exception e){
System.out.println("java c"+e);
}
}
}
到此完成
- JNI中抛出异常
- JNI中抛出异常
- Android JNI抛出异常处理
- jni异常,c++抛出异常,java捕获
- JNI官方规范中文版——如何在JNI中抛出Java异常
- JNI官方规范中文版——如何在JNI中抛出Java异常
- JNI官方规范中文版——如何在JNI中抛出Java异常
- 程序中抛出异常
- JNI调用Native方法,抛出UnsatisfiedLinkError异常
- ORACLE中 抛出异常1
- 构造函数中抛出异常
- finally 中抛出异常处理
- java中异常抛出以及自定义异常
- Java中异常抛出和自定义异常
- 构造函数中抛出的异常
- 析构函数中抛出的异常
- 构造函数中抛出的异常
- 析构函数中抛出的异常
- Ubuntu PHP环境搭建
- Robotium学习
- phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护
- CWMP
- Makefile简单例子
- JNI中抛出异常
- NTDLL.dll6 : 导出函数原型
- 九度OJ-题目1009:二叉搜索树
- nodejs on centos
- c++/c#:将dll捆绑入EXE
- 敏捷开发讲义---如何打造敏捷团队
- 从CVPR 2014看计算机视觉领域的最新热点
- ldd命令的介绍
- android 点击返回键退出程序的方法