Java 实现函数回调
在Java里没用委托(delegate)这方法,所以想要实现回调还是有些麻烦。(想了解C#如何实现?请查看:http://www.cnblogs.com/Martin_Q/p/4478494.html)
那么在Java如何实现回调方式?其实在百度里搜一下一堆这样的教程,我也只是从上面的其中一篇抄下来,修改成自己想要的。
不过我的使用有点点不一样,在为我是在程序出现异常的时候再去主动调用回调的函数。而且异常部份的代码在一个Jar包里!少废话,下面开始:
public final class Dump{
private static final long CB_USER_FUNCTION_MILLIS = 200;
/**
* 回调函数接口
* @author Administrator
*/
public static interface CallBack{
void UserFunctionCB();
}
private static CallBack cbFunction;
/**
* 设置回调函数
* @param cbFun
*/
public static void setCallBackFunction(CallBack cbFun){
cbFunction = cbFun;
}
/**
* 当出现异常时会自动回调此函数,具体如何实现异常回调就不在这里详细描述了
*/
public static void hanleNDKException(){
if(cbFunction != null)
{
Thread th = new Thread()
{
@Override
public void run()
{
cbFunction.UserFunctionCB();
}
};
th.start();
try
{
// 允许用户的执行时间,超过时间后将不再管此线程执行结果
th.join(CB_USER_FUNCTION_MILLIS);
}
catch (InterruptedException e)
{
Logger.logError(LOG_TAG, "Callback user function on thread.join(millis) Error:", e);
}
}
// do something
}
}
外面调用的函数如何去实现UserFunctionCB这函数呢?相信大家都知道了。
public class TestCB{
public static void main(String[] args){
Dump.setCallBackFunction(new Dump.CallBack() {
@Override
public void UserFunctionCB() {
// 这里就是你需要实现的函数,回调的时候会执行你的这个函数
// 你可以在这里添加任意内容,不过你得保证他能在你的指定时间内完成
System.out.println("Hello Call Back Function!");
}
});
// 以下是一个异常触发的操作
String abc = null;
abc.toString();
}
}
到这里整个回调过程已经完成了,当出现任何异常的时候,都会去执行你的函数,去获取你想需要的一些内容!
Java 实现函数回调的更多相关文章
- Java中的回调函数学习
Java中的回调函数学习 博客分类: J2SE JavaJ# 一般来说分为以下几步: 声明回调函数的统一接口interface A,包含方法callback(); 在调用类caller内将该接口设置 ...
- Java中的回调函数学习-深入浅出
Java中的回调函数一般来说分为下面几步: 声明回调函数的统一接口interface A.包括方法callback(); 在调用类caller内将该接口设置为私有成员private A XXX; 在c ...
- jni不通过线程c回调java的函数 --总结
1.JNIEnv类型是一个指向全部JNI方法的指针.该指针只在创建它的线程有效,不能跨线程传递 2.JavaVM是虚拟机在JNI中的表示,一个JVM中只有一个JavaVM对象,这个对象是线程共享的. ...
- (翻译)理解Java当中的回调机制
原文地址:http://cleancodedevelopment-qualityseal.blogspot.com/2012/10/understanding-callbacks-with-java. ...
- 编程基础——C/C++,Java,ObjC讨论回调模式
什么是回调? 因为它是从C开始进入编程世界.术语改只是口.叫习惯了.java里通常叫listener(监听器).C/C++里通常叫callback(回调),ObjC里面叫delegate(托付) 回调 ...
- Java调用和回调总结(2)
Java调用和回调总结(2) 调用的种类 调用有3种, 普通调用(同步调用), 异步调用, 异步回调. 三种调用的特点 普通调用: 也叫做同步调用 , 最常见的调用, 会造成阻塞. 异步调用 : 异步 ...
- 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
[源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...
- hive 调用java的函数和科学记数法转换
hive中field如果是string,比如id,那么使用10000000000+id结果是科学计数法显示,转换为正常显示方法: select (10000000000+cast(id as int) ...
- [Java]_函数传参的疑惑与思考
问题来源于leetcode上的两道题 Path Sum I && II,分别写了两个dfs. void dfs(TreeNode node , int sum , ArrayList& ...
随机推荐
- 标准模板库(STL)的一个 bug
今天敲代码的时候遇到 STL 的一个 bug,与 C++ 的类中的 const 成员变量有关.什么,明明提供了默认的构造函数和复制构造函数,竟然还要类提供赋值运算符重载.怎么会这样? 测试代码 Tes ...
- python学习笔记(2)
1.for循环 用户按照顺序循环可迭代对象中的内容. li = [11,22,33,44] for i in li: print i for循环的else 此功能目前只有for循环里面有发现. 具体条 ...
- jquery placeholder
/* * @author ambar * html5 placeholder pollfill * - 使用绝对定位内嵌层 * - 也适用于密码域 * 目标浏览器: IE 6~9, FF 3.5 */ ...
- STM32解密STM32F103芯片解密STM32F103R6单片机破解多少钱?
STM32解密STM32F103芯片解密STM32F103R6单片机破解多少钱? STM32F系列单片机芯片解密型号: STM32F100 | STM32F101 | STM32F102 | ...
- HDU 2545 树上战争 (并查集+YY)
题意:给一棵树,如果树上的某个节点被某个人占据,则它的所有儿子都被占据,lxh和pfz初始时分别站在两个节点上,lxh总是先移动 ,谁当前所在的点被另一个人占据,他就输了比赛,问谁能获胜 比较有意思的 ...
- Codeforces 307 div2 E.GukiZ and GukiZiana 分块
time limit per test 10 seconds memory limit per test 256 megabytes input standard input output stand ...
- myeclipse2014
myeclipse 2014-GA offline 迅雷下载 http://downloads.myeclipseide.com/downloads/products/eworkbench/201 ...
- iOS常用技术
1.判断系统 #define UMSYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersi ...
- HDU2438 数学+三分
Turn the corner Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- Daikon Forge GUI Library(dfgui)之Event Binding
点击按钮并弹出对话框,就用下面的大问题按钮吧 1,选中按钮,Component/Daikon Forge/Data Binding/Event Binding 2,UI上创建DfPanel,并将其Be ...