Java回调函数

来源:互联网 发布:mac切换字母和拼音 编辑:程序博客网 时间:2024/06/05 02:49
回调函数的实现步骤
  1. 回调函数就是由客户端自己决定回调函数要实现的功能。(决定权交给了客户端)比如:OnTimer()定时器的回调函数,时间到了,需要做什么,交给客户端自己处理,想添加任何功能都行。 
  2. 利用回调函数实现服务器端与客户端的交流、异步通信。
  3. 回调函数一般用于截获消息、获取系统信息或处理异步事件

回调函数的实现步骤

  1. Server定义接口--------->服务器端需要先制定一个接口,制定服务端需要的各种参数。
  2. Server设定回调条件----->服务器端设定调用回调函数的条件,制定注册函数。
  3. Client实现接口---------->客户端实现服务器端制定的接口
  4. Client注册-------------->即:向服务器端传递参数,也是告知服务器端自己的某种需求。

回调函数实例

服务器端制定的接口
/** * 服务器端定义的一个接口, * 通过该接口服务器可以将数据传递给实现该接口的客户端 * @author java_han * */public interface ICallBack {void doSomething(String st);}
服务端程序
import java.util.Scanner;/** * 该类相当于一个服务器端程序,  * 给注册过的客户端UI, * 动态的返回需要更新的数据。 * @author java_han *  */public class DataSource extends Thread {static ICallBack ic;// 给回调函数注册一个空的对象public DataSource() {ic = new ICallBack() {@Overridepublic void doSomething(String st) {}};}// 根据设定的条件给注册的过的客户端返回字符串数据@Overridepublic void run() {Scanner sc = new Scanner(System.in);String st;while ((st = sc.nextLine()) != null) {ic.doSomething(st);System.out.println(st);}}// 客户端的注册函数public void setICallBack(ICallBack ic) {this.ic = ic;}}

客户端程序
import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;/** * 利用回调函数实现异步更新数据 *  * 此类相当于一个客户端程序; * 实现了服务器端制定的接口, * 然后向服务器端注册, * 才能动态的获取服务器端返回的数据。 * @author java_han *  */public class UI extends JFrame implements ICallBack {static UI ui;String s = "";public static void main(String[] args) {ui = new UI();ui.setBounds(100, 100, 400, 300);ui.setDefaultCloseOperation(EXIT_ON_CLOSE);ui.setVisible(true);//启动服务器端程序,并向服务器端注册。DataSource t = new DataSource();t.setICallBack(ui);t.start();}//客户端自己定义回调函数的实现内容//此处是将服务端返回的数据显示在UI的textArea中。public void ChangeText(String st) {JPanel p = new JPanel();p.setLayout(null);p.setBounds(100, 100, 500, 300);// p.setBackground(Color.red);JScrollPane jsp = new JScrollPane();jsp.setBounds(20, 20, 300, 100);JTextArea jta = new JTextArea();jta.setBounds(20, 20, 300, 100);jta.setLineWrap(true);jsp.add(jta);st = s + "  " + st;jta.setText(st);s = jta.getText();p.add(jta);ui.setContentPane(p);ui.setVisible(true);ui.validate();}@Overridepublic void doSomething(String st) {// TODO Auto-generated method stubChangeText(st);}}










0 0