学了多线程---日常2022年6月14日

这两天学了多线程的更深层次的运用,比如Timer类,虽然还是不太熟悉,不过这是一种可以计时使用的进程类,后来的作业有布置做两个线程,这时候就要用到synchronized,这是一个线程锁,确保两个线程不会同时运行,好像还有一个lock的方法,下次看看,今天太晚了就不看了,调用access数据表里的行数据可以用absolute()方法,上次给组件画轨迹,不断创建Jlabel类,再放进去,轨迹不会消失,成功了,结果如下

package 实验15;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Point;
public class Third {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		win a=new win();
	}

}
class win extends Thread{
	JFrame jf;
	JLabel jl1,jl2;
	JLabel j1;
	static String str1,str2;
	Thread move;
	int speed=10;
	int x1=40,x2=300,y1=30,y2=10,count=0;
	int r=60;
	win(){
		move=new Thread(this);
		jf=new JFrame("标签移动");
		jf.setSize(600, 400);
		jf.setLayout(null);
		init();
		jf.setVisible(true);
		jf.setLocationRelativeTo(null);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//界面基本设置
	}
	void init() {
		str1="方形";str2="圆形";
		jl1=new JLabel(str1);jl1.setForeground(Color.RED);
		jl2=new JLabel(str2);jl2.setForeground(Color.BLUE);//标签颜色设置
		jl1.setBounds(x1, y1, 250, 40);
		jl2.setBounds(x2,y2, 250, 40);
		move.start();//进程开始运行
		jf.add(jl2);jf.add(jl1);
	}
	public void run() {
		x2+=100;y2+=100;//设定圆心
		while(true) {	
			System.out.println("运行中");
			System.out.println(count);//运行过程正常检测程序
			
			count++;
			jl2.setBounds((int)(x2+(r*Math.cos(count))),(int)(y2+(r*Math.sin(count))), 250, 40);//标签运动
			JLabel j2=new JLabel(".");
			j2.setBounds((int)(x2+(r*Math.cos(count))),(int)(y2+(r*Math.sin(count))), 250, 40);//标签的运动轨迹
			jf.add(j2);
			
			if(count<30) {
				y1+=5;
				jl1.setBounds(x1,y1, 250, 40);//标签运动
				JLabel jl=new JLabel(".");
				jl.setBounds(x1, y1, 250, 40);//标签运动轨迹
				jf.add(jl);
			}
			if(count>=30&&count<60) {
				x1+=5;
				jl1.setBounds(x1,y1, 250, 40);//标签运动
				JLabel jl=new JLabel(".");
				jl.setBounds(x1, y1, 250, 40);//标签运动轨迹
				jf.add(jl);
			}
			if(count>=60&&count<90) {
				y1-=5;
				jl1.setBounds(x1,y1, 250, 40);//标签运动
				JLabel jl=new JLabel(".");
				jl.setBounds(x1, y1, 250, 40);//标签运动轨迹
				jf.add(jl);
			}
			if(count>=90&&count<120) {
				x1-=5;
				jl1.setBounds(x1,y1, 250, 40);//标签运动
				JLabel jl=new JLabel(".");
				jl.setBounds(x1, y1, 250, 40);//标签运动轨迹
				jf.add(jl);
			}
			if(count>=120) {
				count=0;
				x1=40;y1=30;//标签回到原点
			}
		try {
			Thread.sleep(100);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}	
		
		}
	}
	
}

线程总是一起开始,好麻烦,只能让一个先睡几秒了

posted @ 2022-06-14 23:57  夏磐  阅读(23)  评论(0)    收藏  举报