实现线程的两种方式——实现Runnable接口

package thread;

import java.awt.Container;
import java.net.URL;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

/*
 * 实现Runnable接口
 * 实现Runnable接口的语法
 * public class Thread extends Object implements Runnable
 * 使用Runnable接口的步骤
 * 1.建立Runnable对象
 * 2.使用参数为Runnable对象的构造方法创建Thread实例
 * 3.调用start()启动线程
 *
 */
public class SwingAndThread extends JFrame{
    //声明JLabel对象
    JLabel jl=new JLabel();
    //声明线程对象
    private static Thread t;
    //声明计数变量
    private int count=0;
    //声明容器
    private Container container=getContentPane();
    //定义构造方法
    public SwingAndThread() {
        //绝对定位窗体大小与位置
        setBounds(300, 200, 250, 100);
        //使窗体不适用任何布局管理器
        container.setLayout(null);
        //获取图片的URL
        URL url=SwingAndThread.class.getResource("ImageButton.jpg");
        //实例化一个Icon
        Icon icon=new ImageIcon(url);
        //将图标放置在标签中
        jl.setIcon(icon);
        //设置图片在标签的左上方
        jl.setHorizontalAlignment(SwingConstants.LEFT);
        //设置标签的位置与大小
        jl.setBounds(10, 10, 200, 50);
        jl.setOpaque(true);
        t=new Thread(new Runnable() {
            //定义匿名内部类,该类实现Runnable接口
            @Override
            public void run() {//实现run()
                
                while(count<=200) {//设置循环条件
                    //将标签的横坐标用变量表示
                    jl.setBounds(count, 10, 200, 50);
                    
                    try {
                        //使线程休眠1000毫秒
                        Thread.sleep(1000);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    //使横坐标每次增加4
                    count +=4;
                    if(count==200) {
                        //当图标达到标签的最右边时,使其回到标签最左边
                        count =10;
                    }
                }
            }
        });
            t.start();//启动线程
            container.add(jl);//将标签添加到容器中
            //使窗体可见
            setVisible(true);
            //设置窗体关闭方式
            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        
    }
    public static void main(String[] args) {
        new SwingAndThread();

    }

}

你可能感兴趣的:(实现线程的两种方式——实现Runnable接口)