关于swing多线程理解

1.swing介绍

Swing是SUN推出的轻量级的开发用户界面的工具包,最初它的设计是在单线程环境下运行的,它的执行也是单线程的,这也就是为什么我们说Swing不是多线程安全的。所以为了编写交互性更高的UI界面,必须了解其内部的线程运行机制。

        Swing程序往往包括了三种类型的线程,而且运行一个Swing应用程序,都会自动创建三个线程,分别是:

        1)初始化线程:

              它运行程序的主方法

        2)事件调度线程:

          它负责捕获系统事件

        3)任务线程:

              捕获的事件将发送到这一个线程做处理。 

2.swing模式

所有的事件(如键盘按下、鼠标移动)都放置到一个事件队列中。Java.awt.EventQueue对象负责从这个队列中取出事件并适当地派发它们。EventQueue的派发机制由单独的一个线程管理,这个线程称为事件派发线程(EDT,Event Dispatch Thread)。 
    比如在JTextField按下一个键,EDT把这个按键事件派发到这个组件的键监听器。这个组件接着更新他的模式(执行actionPerformed方法),并把一个绘制请求发布到事件队列(EventQueue)。EDT从这个队列中取出这个绘制请求并再次通知这个组件,让它重新绘制自身。 

3.swing实例

package window;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JLabel;
import javax.swing.JSlider;

public class aa extends JFrame implements ChangeListener {

	private JPanel contentPane;
	public JTextField textField;
	private JTextField textField_1;
	private String ss;
	public JSlider slider;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					aa frame = new aa();
					frame.setVisible(true);
					Thread thread = new My();
					thread.start();
				} catch (Exception e) {
					e.printStackTrace();
				}

			}

		});

	}

	/**
	 * Create the frame.
	 */
	public aa() {
		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);

		textField = new JTextField();
		textField.setBounds(150, 100, 142, 21);
		contentPane.add(textField);
		textField.setColumns(10);
		new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					for (int i = 0; true; i++) {
						textField.setText(String.format("当前进度:%s", i));
						Thread.sleep(200);
					}
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}).start();
		textField_1 = new JTextField();
		textField_1.setColumns(10);
		textField_1.setBounds(150, 42, 142, 21);
		contentPane.add(textField_1);

		JButton btnNewButton = new JButton("\u767B\u5F55");

		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if (ss == null) {
					ss = "s";
				} else {
					ss += "s";
				}
				System.out.println(slider.getValue());

			}
		});

		btnNewButton.setBounds(104, 137, 95, 25);
		contentPane.add(btnNewButton);

		JLabel lblNewLabel = new JLabel("\u8D26\u53F7:");
		lblNewLabel.setBounds(82, 45, 30, 15);
		contentPane.add(lblNewLabel);

		JLabel label = new JLabel("\u5BC6\u7801:");
		label.setBounds(82, 105, 30, 15);
		contentPane.add(label);

		slider = new JSlider();
		slider.setBounds(121, 194, 200, 24);
		contentPane.add(slider);
		textField_1.setText("" + slider.getValue());
		new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					for (int i = 0; true; i++) {
						textField_1.setText(String.format("当前进度:%s", i));
						Thread.sleep(100);
					}
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}).start();
		JButton button = new JButton("\u767B\u5F55");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println("sss");
			}
		});
		button.setBounds(226, 137, 95, 25);
		contentPane.add(button);
		slider.addChangeListener(this);
	}

	@Override
	public void stateChanged(ChangeEvent e) {
		textField_1.setText("" + slider.getValue());
		System.out.println(slider.getValue());

	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值