重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
import java.awt.*;
成都创新互联网站建设提供从项目策划、软件开发,软件安全维护、网站优化(SEO)、网站分析、效果评估等整套的建站服务,主营业务为成都网站制作、成都网站建设,APP应用开发以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。成都创新互联深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
/**
* 继承JFrame 实现 MouseMotionListener,ActionListener
*
*/
public class Exe10_1 extends JFrame implements MouseMotionListener,
ActionListener {
JLabel tracer;//声明一个JLabel
JButton start;//声明一个JButton
boolean tracing = true;// 定义一个Boolean变量
/**
* 构造函数
*/
public Exe10_1() {
super("鼠标跟踪");//设置JFrame的title
setBounds(300, 300, 300, 300); // JFrame大小
setLayout(new FlowLayout()); //JFrame的布局为FlowLayout
tracer = new JLabel();//给刚才声明的JLabel赋值
tracer.setPreferredSize(new Dimension(100, 30));//
tracer.setBackground(Color.blue);//设置背景色
tracer.setForeground(Color.white);//设置前景色
tracer.setOpaque(true);
addMouseMotionListener(this);//整个JFrame监听鼠标事件
add(tracer); //JFrame添加JLabel
start = new JButton("停止跟踪");//Jbutton初始化的名字为“停止跟随”
start.addActionListener(this);//JButton添加监听事件
add(start);//JFrame添加JLabel
setVisible(true);//JFrame的可见性
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//右上角的【关闭】按钮
}
/* (当按下鼠标 不放开时 滑动鼠标 JLabel上打印内容)
* @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent)
*/
public void mouseDragged(MouseEvent e) {
tracer.setText("(x,y) = (" + e.getX() + "," + e.getY() + ")");
}
/* (鼠标在JFrame上滑动时 JLabel上打印内容)
* @see java.awt.event.MouseMotionListener#mouseMoved(java.awt.event.MouseEvent)
*/
public void mouseMoved(MouseEvent e) {
tracer.setText("(x,y) = (" + e.getX() + "," + e.getY() + ")");
}
/* (鼠标监听事件处理)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent e) {
if (tracing == true) {
removeMouseMotionListener(this);//JFrame移除监听鼠标事件
start.setText("继续跟踪");//JLabel重新设置Text
tracing = false;
} else {
addMouseMotionListener(this);//JFrame添加鼠标事件监听
start.setText("停止跟踪");//JLabel重新设置Text
tracing = true;
}
}
/** 程序入口
* @param args
*/
public static void main(String[] args) {
Exe10_1 frame = new Exe10_1();//生成一个Exe10_1的实例 实例名为:frame
}
}
希望对你有帮助
在应用里经常都有用到在后台跑定时任务的需求。举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据、文件等。在本文里,3种不同的实现方法:
普通thread实现
TimerTask实现
ScheduledExecutorService实现
1.普通thread
这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下:
public class Task1 {
public static void main(String[] args) {
// run in a second
final long timeInterval = 1000;
Runnable runnable = new Runnable() {
public void run() {
while (true) {
// ------- code for task to run
System.out.println("Hello !!");
// ------- ends here
try {
Thread.sleep(timeInterval);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}
2.用Timer和TimerTask
上面的实现是非常快速简便的,但它也缺少一些功能。
用Timer和TimerTask的话与上述方法相比有如下好处:
当启动和去取消任务时可以控制
第一次执行任务时可以指定你想要的delay时间
在实现时,Timer类可以调度任务,TimerTask则是通过在run()方法里实现具体任务。
Timer实例可以调度多任务。
当Timer的构造器被调用时,创建了一个线程,这个线程可以用来调度任务:
import java.util.Timer;
import java.util.TimerTask;
public class Task2 {
public static void main(String[] args) {
TimerTask task = new TimerTask() {
@Override
public void run() {
// task to run goes here
System.out.println("Hello !!!");
}
};
Timer timer = new Timer();
long delay = 0;
long intevalPeriod = 1 * 1000;
// schedules the task to be run in an interval
timer.scheduleAtFixedRate(task, delay,
intevalPeriod);
} // end of main
}
3.ScheduledExecutorService
ScheduledExecutorService是从Java SE 5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。
相比于上两个方法,它有以下好处:
相比于Timer的单线程,它是通过线程池的方式来执行任务的
可以很灵活的去设定第一次执行任务delay时间
提供了良好的约定,以便设定执行的时间间隔
通过ScheduledExecutorService#scheduleAtFixedRate展示这个例子,通过代码里参数的控制,首次执行加了delay时间:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Task3 {
public static void main(String[] args) {
Runnable runnable = new Runnable() {
public void run() {
// task to run goes here
System.out.println("Hello !!");
}
};
ScheduledExecutorService service = Executors
.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);
}
}
很简单,单元测试啊!引入包 import org.junit.Test;
比如下面这个测试函数,不是main函数,但是你可以执行它并测试输出。注意要有@标识,这是注释,必要的。还有就是可以打断点啊!断点就是执行停止的地方,可以是程序某个模块,某个变量值等。
@Test
public void selectUserByID() {
// 得到SqlSession实例,便于执行增删改查、事务提交回滚等操作。
SqlSession session = getSqlSessionFactory().openSession();
try {
userPOJO user = (userPOJO) session.selectOne("mapper.userPOJO.selectByName", 2);
System.out.println(user);
} finally {
session.close();
}
}
指定定时任务的代码如下:
public void schedule(TimerTask task,Date time)
比如,我们希望定时任务2006年7月2日0时0分执行,只要给第二个参数传一个时间设置为2006年7月2日0时0分的Date对象就可以了.
有一种情况是,可能我们的程序启动的时候,已经是2006年7月3日了,这样的话,程序一启动,定时任务就开始执行了.
schedule最后一个重载的方法是
public void schedule(TimerTask task,Date firstTime,long period)
既然号称是定时任务,我们肯定希望由我们来指定任务指定的时间,显然上面的方法就不中用了,因为我们不知道程序什么时间开始运行,就没办法确定需要延时多少.没关系,schedule四个重载的方法还没用完呢.用下面这个就OK了。