import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
class ShowState extends JFrame implements ActionListener, Runnable{
JTextArea ta;//分别注册文本区,按钮,文本行,标签和线程
JButton button_start,button_interrupt,button_terminate;
JTextField text_state;
JLabel label;
Thread t;
public ShowState(){
super("演示线程状态");//设置窗口题目
this.setSize(450,300);//设置窗口大小
this.setLocation(200,200) ;//设置窗口位置
this.setDefaultCloseOperation(EXIT_ON_CLOSE);//设置关闭方式
ta=new JTextArea();//设置文本区文字自动滚动并添加文本区
ta.setAutoscrolls(true);
this.add(ta);
button_start=new JButton("启动");//依次注册启动、中断和结束按钮并添加监听器
button_start.addActionListener(this);
button_interrupt=new JButton("中断");
button_interrupt.addActionListener(this);
button_terminate=new JButton("线程结束后");
button_terminate.addActionListener(this);
button_terminate.setEnabled(false);//没有开始的时结束按钮不能使用
button_interrupt.setEnabled(false);//没有开始的时中断按钮不能使用
t=new Thread(this);//创建线程对象,目标对象是当前对象
label=new JLabel("线程状态:");//设置显示状态的文本行,而且不能修改
text_state=new JTextField(" "+t.getState(),10);
text_state.setEditable(false);
JPanel panel=new JPanel();//把按钮、文本行、文本区放入操作面板,设置操作面板布局为流式布局
panel.setLayout(new FlowLayout(0));
panel.add(button_start);
panel.add(button_interrupt);
panel.add(button_terminate);
panel.add(label);
panel.add(text_state);
this.add(panel,BorderLayout.SOUTH);
this.setVisible(true);//设置可见性
}
public static void main(String args[]){
new ShowState();
}
public void actionPerformed(ActionEvent e){
//TODO自动生成方法存根
if(e.getSource()==button_start) {//单击启动按钮时
t=new Thread(this); //重新创建一个线程对象
t.start();
text_state.setText(" "+t.getState());//显示线程状态
button_start.setEnabled(false);//开始之后可以中断但是不可以再开始
button_interrupt.setEnabled(true);
}
if(e.getSource()==button_interrupt) {//单击暂停按钮时
t.interrupt();
text_state.setText(" "+t.getState());//显示线程状态
button_start.setEnabled(true);//暂停之后可以再开始
button_interrupt.setEnabled(false);
button_terminate.setEnabled(true);
}
if(e.getSource()==button_terminate){
//单击‘线程终止后’按钮时,显示线程终止后的状态
text_state.setText(" "+t.getState());
}
}
public void run(){
//TODO自动生成方法存根
int i=1;
while(t.isAlive()&&!t.isInterrupted()){//线程活动且没有中断
String str="a";
if(i%20==0)
str+="\n";
i++;
ta.append(str);
try{
t.sleep(100);
}catch(InterruptedException e){
//TODO自动生成catch块
break;//退出循环
}
}
}//run()方法执行结束,线程对象终止
}