使用Timer为界面执行异步任务
-------------------siwuxie095
工程名:TestSwingTimer
包名:com.siwuxie095.timer
类名:TestTimer.java
工程结构目录如下:
代码:
package com.siwuxie095.timer;
import java.awt.BorderLayout; import java.awt.EventQueue;
import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder;
import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
import javax.swing.JProgressBar; import javax.swing.Timer; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.JButton;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent;
public class TestTimer extends JFrame {
private JPanel contentPane;
//定义 value,初始值为 0 int value=0;
/** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { TestTimer frame = new TestTimer(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); }
/** * Create the frame. */ public TestTimer() {
try { UIManager.setLookAndFeel(new WindowsLookAndFeel()); } catch (UnsupportedLookAndFeelException e1) { e1.printStackTrace(); }
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout(0, 0)); setContentPane(contentPane);
JProgressBar progressBar = new JProgressBar(); contentPane.add(progressBar, BorderLayout.NORTH);
JButton btnRun = new JButton("Run"); btnRun.setFocusable(false);
/** * 为按钮 Run 添加 mouseClicked 事件 * 鼠标单击按钮Run后,进度条每隔 1 秒增加 10% * 10 秒钟后,增加到 100% (注:1000毫秒=1秒) */ btnRun.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { /** * 创建一个 Timer,注意:是 javax.swing 包中的 Timer 类 * 构造方法需要传入两个参数: * 第一个 delay 延时,以毫秒计,且 timer 所触发的动作需要经过延时才会触发 * 第二个 listener 监听器,传入匿名对象 new ActionListener() */ Timer timer=new Timer(1000, new ActionListener() {
/** * 当前 timer 所对应的操作都是在 actionPerformed() 中执行 * * 当前 timer 的 actionPerformed() 方法一旦被触发,将自动被派发给UI线程, * 放到UI线程的执行队列中去执行,所以这里面的操作都可以针对当前的UI元素来 * 进行属性的设定,所有操作都是UI线程安全的 */
@Override public void actionPerformed(ActionEvent e) { value+=10; progressBar.setValue(value); //进度条读满后,重置为 0 if (value==100) { value=0; } } });
//将该timer设定为循环执行 timer.setRepeats(true); //开启timer timer.start();
} }); contentPane.add(btnRun, BorderLayout.SOUTH); }
} |
将窗体 JFrame 的 LookAndFeel 设定为 Windows
在根面板 contentPane 的上方添加一个 JProgressBar,
下方添加一个 JButton
将 JButton 的文本(text)改为 Run,并 Rename 为 btnRun,
将 focusable 属性设为 false
为 JButton 添加 mouseClicked 事件,鼠标单击 Run 按钮后,
进度条每隔 1 秒增加 10%,10 秒钟后,增加到 100%,循环
运行程序:
【made by siwuxie095】
- 使用Timer为界面执行异步任务
- 使用SwingWorker为界面执行异步任务
- 使用SwingWorker为界面执行异步任务
- JAVA中使用Timer,TimerTask轮循数据库,执行定时任务
- 使用System.Threading的Timer&Quartz.net两种方式实现定时执行任务,防止IIS释放timer对象
- asp.net 使用timer 定时执行任务
- Service学习——第五篇 使用IntentService在单独线程上执行异步任务
- 使用Timer执行定时任务
- JAVA中使用Timer,TimerTask轮循数据库,执行定时任务
- Swoole入门:执行异步任务01(使用案列,简单逻辑梳理)
- spring boot使用自定义配置的线程池执行Async异步任务
- Android使用IntentService执行异步任务
- Android中AsyncTask(异步执行任务)的使用
- 使用Promise和async-await实现的一个异步遍历+同步执行任务的实例
- java定时执行任务--Timer的使用
- 使用TimerTask做每月定时执行任务.
- Android中使用Handler和异步任务(AsyncTack)来为UI线程执行费时操作
- Android中使用Handler和异步任务(AsyncTack)来为UI线程执行费时操作
- 使用java.util.Timer来周期性的执行制定的任务
- 使用java.util.Timer来周期性的执行制定的任务