Java回调函数示例

Callback接口

package com.jdy;

public interface Callback {

    public void getMessage(String status, String data);

}

MyRequest类

package com.jdy;

import java.util.Map;

public class MyRequest implements Runnable {
    private Callback callback;
    private Map<String, Object> param;

    public Callback getCallback() {
        return callback;
    }

    public void setCallback(Callback callback) {
        this.callback = callback;
    }

    public Map<String, Object> getParam() {
        return param;
    }

    public void setParam(Map<String, Object> param) {
        this.param = param;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + " ---> running");
        // 请求服务器
        new Server().handle(callback, param);

    }

}

Server类

package com.jdy;

import java.util.Map;

public class Server {
    public void handle(Callback callback, Map<String, Object> parma) {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 处理数据
        if (callback != null) {
            callback.getMessage("success", parma.get("Hello") + " World!");
        }       
    }
}

TestFrame类

package com.jdy;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;

public class TestFrame extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel contentPane;
    private JLabel inital;
    private JLabel num;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {

        System.out.println(Thread.currentThread().getName() + " ---> running");
        TestFrame frame = new TestFrame();
        frame.setVisible(true);
        frame.counter();
    }

    public void counter() {
        for (int i = 1; i <= 100; i++) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            num.setText(i+"");
        }
    }

    /**
     * Create the frame.
     */
    public TestFrame() {
        setTitle("Thread");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        inital = new JLabel("初始化数据");
        inital.setHorizontalAlignment(SwingConstants.CENTER);
        inital.setBounds(159, 51, 117, 34);
        contentPane.add(inital);

        JButton btnNewButton = new JButton("按钮");
        btnNewButton.setBounds(175, 128, 93, 23);
        btnNewButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 回调函数
                Callback callback = new Callback() {
                    @Override
                    public void getMessage(String status, String data) {
                        if (status.equals("success") && data != null) {
                            System.out.println(data);
                            inital.setText(data);
                        }
                    }
                };

                // 请求参数
                Map<String, Object> param = new HashMap<>();
                param.put("Hello", "Hello");

                // 装配数据
                MyRequest request = new MyRequest();
                request.setCallback(callback);
                request.setParam(param);

                // 开启线程
                Thread t = new Thread(request);
                t.start();
            }
        });
        contentPane.add(btnNewButton);

        num = new JLabel("0");
        num.setHorizontalAlignment(SwingConstants.CENTER);
        num.setBounds(66, 61, 54, 15);
        contentPane.add(num);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值