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);
}
}