思路:
因为数据要随着线程改变而改变,所以,线程一定控制这个变量,而线程控制子类变量,就必须将该变量设置为静态变量,从而在线程中改变变量
主类
package work1;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.function.IntToDoubleFunction;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class TestMain {
JFrame jFrame;//成员变量,未设置访问类型,默认包内访问,先创建一个JF对象
String stringx;//保存第一个变量
static JLabel jLabel=new JLabel("");
public static void main(String[] args) {
// TODO 自动生成的方法存根
TestMain testMain=new TestMain();
testMain.initView();
}
boolean isRun=true;//全局变量控制循环体,从而控制循环的暂停;
public void initView() {
jFrame=new JFrame("好好学习");//第一步,初始化
jFrame.setBounds(500, 500, 600, 600);//第二步,设置位置大小
jFrame.setLayout(null);//控制布局 null为不使用系统所给的任何一种布局
jLabel.setBounds(250, 250,200, 200);
jFrame.add(jLabel);
TestMain2 mTestMain2=new TestMain2();
mTestMain2.start();
jFrame.setVisible(true);//第三部,让界面显示出来,这句话一定在最后
//但凡是成对的元素,必须要先写出来再将光标移到中间写其他的代码
}
}
线程子类
package work1;
import javax.swing.JLabel;
//第二种创建子线程的方法方法2,继承,写自己的线程方法
public class TestMain2 extends Thread {
int h=0,m=0,s=0;
@Override
public void run() {
super.run();
while(true)
{
try {
Thread.sleep(1000);
s++;
//显示在jlabel控件上
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
if(s==60)
{
m++;
s=0;
}
if(m==60)
{
m=0;
h++;
}
TestMain.jLabel.setText(h+":"+m+":"+s);
}
}
}