`
15700786134
  • 浏览: 4763 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

初始线程

    博客分类:
  • java
阅读更多

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

 

 

       既然是在界面上,那必定得先有一个界面,所以第一步就是,自己的类继承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函数。仅仅做了这个小项目,只是会使用线程,但对线程的理解并不清楚,还需要加深思考和理解。

分享到:
评论

相关推荐

    多线程初始化案例

    多线程建立初始化 ,pv操作 线程间通信

    初始化多线程的几种方法

    很好的多线程入门程序,一共四个,希望大家支持,编写环境vs2008,语言c#

    易语言线程初始化

    易语言线程初始化.....

    多线程的其他知识_动力节点Java学院整理

    一个线程组代表了一系列的线程。并且,一个线程组可以包括其他的线程组。除了初始线程组外,每个线程组都有一个父线程组,类似于树的结构。

    Java虚拟机(第二版)

    一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时他才运行,程序结束时他就停止。...main()方法是程序的起点,他被执行的线程初始化为程序的初始线程。程序中其他的线程都由他来启动。

    python 多线程重启方法

    python 多线程程序运行中,会出现由于异常而导致某线程停止的情况,为了保证程序的稳定运行,需要...3.隔一段时间使用threading.enumerate()获取当前所有线程对象,与初始线程组对比,如果某个name缺失,则重新start。

    线程例子(C#,初始接触线程的人参考学习)

    这是个用C#编写的关于线程的小例子,供初始接触线程的程序员了解,谢谢

    操作系统分区

    操作系统,简单分区,课程设计的简单程序 public class Fenqu { ...//测试数据:初始线程驻留区表 public Thread_residence_memory[] thread_residence_memory1 = new Thread_residence_memory[3];

    g++中的局部静态变量的初始化机制及线程安全

    g++中的局部静态变量的初始化机制及线程安全

    实战Java高并发程序设计(第2版)PPT模板.pptx

    1 2.1有关线程你必须知道的事 3 2.3volatile与Java内存模型(JMM) 2 2.2初始线程:线程的基本操作 4 2.4分门别类的管理:线程组 2java并行程序基础 5 2.5驻守后台:守护线程(Daemon) 6 2.6先做重要的事:线程...

    linux多线程编程

    linux多线程编程 声明:本文是网上整理的资料,版权属其作者本人所有。 1 第一章 线程基础知识 2 一.什么是线程 2 二.线程的优点 2 三.线程的缺点 2 四.线程的结构 2 五.线程标识 2 六.线程的创建 3 七..线程...

    深入解析Windows操作系统中文.part2.rar

    阶段3:创建初始线程,以及它的栈和执行环境 308 阶段4:将新进程通知Windows子系统 309 阶段5:启动初始线程的执行 310 阶段6:在新进程环境下执行进程初始化 310 6.3 线程的内部机理 313 数据结构 313 内核变量 ...

    实验4 线程编程实验.doc

    实验4 线程编程实验.doc

    c++多线程的创建挂起执行与销毁

    并在对话框的初始化函数中,设定进度条的范围;为编辑框关联一个整型的变量;为12个按钮添加消息处理函数; 2. 定义结构体:用做线程函数的参数传递 typedef struct Threadinfo{ CProgressCtrl *progress;//进度条...

    环形buffer无锁一线程写一线程读

    可以设定buffer的初始块及数量,初始块是固定大小的,当需要扩环时会动态创建块即不像其它的库块满了就写失败了,当释放时会将动态创建的块还给系统,初始块还给自己的内存池,而且支持异步读写buffer,和asio配合...

    VB创建线程动态链接库(VBCreateThread.dll)

    特点:可替代API CreateThread来创建线程,且自动对线程进行初始化,线程函数中不再需要初始化线程就可以使用对象、类、窗口等。提供多达四个线程参数,如果不够用的可通过结构体扩展,通过API声明使用,大大简化...

    线程和进程的区别.txt

    线程和进程的区别.txt线程和进程的区别.txt线程和进程的区别.txt线程和进程的区别.txt

    完成数据初始化、修改进度条组件进度变化的线程类.zip_修改进度条组件进度变化的线程类_完成数据初始化_进度条类

    完成数据初始化,修改进度条组件进度变化的线程类

    java应用程序中使用线程

    3.1 Java线程 3.2 创建线程 3.3 使用线程的缺点 3.3.1 初始启动变慢 3.3.2 资源利用 3.3.2 资源利用 3.4 线程管理 3.5 共享资源的使用同步 3.5.1 同步方法和同步代码块的嵌套调用...

    2015综合题信号量.txt

    某网络系统有N个工作线程和1个调度服务进程,作线 星初始化时 守候队列中等待;当用户请求到达时,由服务进程唤醒工作线程执;若工线程守候队列为空则则检查请求等待队列是否已满(最多可存放M个用户请求),未满则将...

Global site tag (gtag.js) - Google Analytics