当前位置:首页 > 开发 > 编程语言 > 多线程 > 正文

初始线程

发表于: 2015-07-19   作者:15700786134   来源:转载   浏览:
摘要:       暑假学习的第一课是讲线程,任务是是界面上的一条线运动起来。            既然是在界面上,那必定得先有一个界面,所以第一步就是,自己的类继承JAVA中的JFrame,在新建的类中写一个界面,代码如下: public class ShapeFr

      暑假学习的第一课是讲线程,任务是是界面上的一条线运动起来。

 

 

       既然是在界面上,那必定得先有一个界面,所以第一步就是,自己的类继承JAVA中的JFrame,在新建的类中写一个界面,代码如下:

public class ShapeFrame extends JFrame { 
 public void initUI(){
  this.setTitle("线程动画");
  this.setSize(700, 600);
  this.setDefaultCloseOperation(3);
  this.setLocationRelativeTo(null);

  this.setResizable(false);
  this.setVisible(true);

}

 

 

     界面写好了,让线条动起来的前提是与一条线,所以接下来就要画线了,那就再创建一个类,在这个类中画出线条并定义运动的函数,需要定义的有线条的起始点,终点的坐标,运动的方向和速度,比较特别的是还需要定义一个方向的变量,变量的初始化我是将其全部定义在构造函数中,也可以在定义时初始化,这里将方向dir初始化为右。

接下来就要写出画线的函数,函数如下:

public void drawLine(Graphics2D g){
  g.setStroke(new BasicStroke(width));
    g.setColor(Color.BLACK); 
  g.drawLine(x1, y1, x2, y2);
 }

      主要有设置颜色,传递画笔,Graphics2D类继承了Graphics类,所以使用它创建画笔对象。

      有了线条,下一步就是让它动以来,开始时先做简单的运动,上下左右四个方向的直线运动,这时别忘了定义方向变量,example:private static final int LEFT = 1;

以向右为例,mov函数使用switch(dir)判断,每个case中主要有两个操作,将x1,x2加上运动速度,在判断是否越界,若越界的话,就向另一个方向运动。实现:

switch (dir) {
  case LEFT:
   x1-=speed;
   x2-=speed;
   if(x1<=0){
    dir=UP;
   }

      为了防止线条只增不减,还需要写一个清除的函数,这时还需定义四个变量,并在运动函数中将之前线条的起始终止坐标赋给这四个变量。函数中与画黑线相对,画白线就好。这是因为在运动前就将原坐标赋给后面用的四个变量,即画白线的地方是上一次画黑线的地方。所以画出来的效果就像运动起来一样。在调用这三个函数时,顺序应该是move--->clear-->drawline。否则会出现断断续续的黑白线。

 

 

           只是这样,运行起来是不能画出线条的,还需要加上在窗体类中监听,这就有需要一个类实现接口,并在类中定义三个对象:

private ShapeFrame sf;
 private ShapeLine line;
 private Graphics2D g;

      然后写构造函数:

public ThreadListener(ShapeFrame sf) {
  this.sf = sf;
  g = (Graphics2D) sf.getGraphics();
 }

      这是用于创建监听时传递窗体对象。

      再在run函数里边依次调用move--->clear-->drawline,并且在异常处理中是线程睡眠500ms。这里的run函数是在继承MouseAdapter和实现Runnable后自动添加的函数,是定义在Runnable接口中的函数。在mouseReleased中创建划线类的对象,用于run中的判断。实现接口时,可重写接口中的函数。

 

 

      接下来就只需要在窗口类中加上监听,创建线程,并且让线程开始就可以了。需要注意的是,在创建线程时,要传递对象。代码:

ThreadListener l = new ThreadListener(this);
  this.addMouseListener(l);
  Thread t = new Thread(l);
  t.start();

 

 

      这个任务主要是为了让我们清楚线程的使用,就我的体会而言,加监听器是需要实现Runnable类,并使用了run函数。仅仅做了这个小项目,只是会使用线程,但对线程的理解并不清楚,还需要加深思考和理解。

初始线程

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
数据库都会有两种方式来管理:命令行和图形化界面 命令行方式如下: 图形化界面方式如下: 在图形化
Velocity是一个基于java的模板引擎。它允许任何人仅仅简单的使用模板语言来引用由java代码 定义的对
今天初始WPF,以前只是了解,没怎么用过,其实我个人感觉,除了界面效果可能比WinForm也好些,其他
解释1:  Jboss是 web服务器的一种,主要做ejb容器,和tomcat集成就可以jsp,servlet,ejb通吃;  Jbo
•Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查
一、什么是UML UML——统一建模语言,是用来设计软件蓝图的可视化建模语言;它支持面向对象系统的分
1.WHAT Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。如果我们想混合使用
1.什么是JSP JSP=HTML+JAVA脚本+JSP标签 通俗的说,就是一种动态网页技术,而我们经常用的HTML是一
做项目期间,我们用到了MVC,当然一开始接触到新知识,我们不禁会去问,什么是MVC啊,它的作用是什么
1.什么是Servlet? 可以把它理解为一个小程序,该程序运行在服务器端,用来处理客户端发送过来的请
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号