java SWT中Label实时刷新当前时间
2015-08-22 11:01
495 查看
前段时间在做一个java的小项目的时候,做前端界面的时候,需要用到SWT,就是在一个Label上显示时间,而且是需要实时刷新的,就是时间一直在往前走,label上显示时间很简单。学过java的应该都清楚如何显示时间,
用上面两段代码就能把当前的时间格式化输出了,就是和我们日常看到的时间一样习惯,比如输出:2015-08-22 10:43:24.
而我需要做的是在SWT中的Label标签上显示当前实时的时间,就是需要不断的刷新,每隔一秒刷新时间,我开始考虑了用线程做,我先写的是在控制台上实时打印出时间,这个很简单,用线程,然后每次让它sleep(1000),每隔一秒就就打印出时间,但是当我想把时间输出到Label上时,发现一直报错,线程出错,我就纠结了很久,这样应该没有错啊。然后就去网上搜集各种资料,发现也有人遇到了这样的问题,看到论坛上有人写到,需要在标签之后加上.getDisplay().asyncExec(new Runnable(),因为这个就是处理界面的线程,网上的解释是它的主要作用:在非主线程中对SWT组件进行可能引起界面刷新的操作时使用
因为SWT的机制是不允许主线程以外的线程对SWT组件进行这种操作,所以如果你是在别的线程中执行该类代码,那必须用Lable.getDefault().asyncExec(new Runnable(){})(Lable换成shell都是没问题的,看你对什么刷新数据),最后加上这个之后,真的解决了问题,可以在Label上实时刷新时间了,代码附上:
接下来就可以看到可以实时刷新时间了,如下图:
欢迎转载,转载请注明出处:【/article/7970398.html】
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String s = sdf.format(new Date());
用上面两段代码就能把当前的时间格式化输出了,就是和我们日常看到的时间一样习惯,比如输出:2015-08-22 10:43:24.
而我需要做的是在SWT中的Label标签上显示当前实时的时间,就是需要不断的刷新,每隔一秒刷新时间,我开始考虑了用线程做,我先写的是在控制台上实时打印出时间,这个很简单,用线程,然后每次让它sleep(1000),每隔一秒就就打印出时间,但是当我想把时间输出到Label上时,发现一直报错,线程出错,我就纠结了很久,这样应该没有错啊。然后就去网上搜集各种资料,发现也有人遇到了这样的问题,看到论坛上有人写到,需要在标签之后加上.getDisplay().asyncExec(new Runnable(),因为这个就是处理界面的线程,网上的解释是它的主要作用:在非主线程中对SWT组件进行可能引起界面刷新的操作时使用
因为SWT的机制是不允许主线程以外的线程对SWT组件进行这种操作,所以如果你是在别的线程中执行该类代码,那必须用Lable.getDefault().asyncExec(new Runnable(){})(Lable换成shell都是没问题的,看你对什么刷新数据),最后加上这个之后,真的解决了问题,可以在Label上实时刷新时间了,代码附上:
package datetime; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Label; import java.util.Date; import org.eclipse.swt.SWT; import org.eclipse.wb.swt.SWTResourceManager; import com.ibm.icu.text.SimpleDateFormat; public class TimeView { protected Shell shell; /** * Launch the application. * @param args */ public static void main(String[] args) { try { TimeView window = new TimeView(); window.open(); } catch (Exception e) { e.printStackTrace(); } } /** * Open the window. */ public void open() { Display display = Display.getDefault(); createContents(); shell.open(); shell.layout(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } /** * Create contents of the window. */ protected void createContents() { shell = new Shell(); shell.setSize(450, 300); shell.setText("实时刷新时间"); final Label label = new Label(shell, SWT.NONE); label.setFont(SWTResourceManager.getFont("微软雅黑", 13, SWT.NORMAL)); label.setBounds(69, 48, 174, 41); new Thread() {//线程操作 public void run() { while(true){ try { //对Label进行实时刷新,需要加上这句 label.getDisplay().asyncExec(new Runnable() { @Override public void run() { // 设置时间 ,格式化输出时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String s = sdf.format(new Date()); label.setText(s);//输出到Label上 } }); Thread.sleep(1000);//每隔一秒刷新一次 } catch (Exception e) { } } } }.start(); } }
接下来就可以看到可以实时刷新时间了,如下图:
欢迎转载,转载请注明出处:【/article/7970398.html】
相关文章推荐
- Java-5-异常
- Struts(15)类型转换
- Java-4-重载多态
- Struts(14)本地化/国际化(i18n)
- Struts(13)验证框架
- Java-3-继承
- Struts(12)MySQL数据库访问
- Java-2-类
- Struts(11)文件上传
- Struts(10)值栈/OGNL
- Java--集合
- Struts(9)结果和结果类型
- Test Spring el with ExpressionParser
- Struts(8)拦截器
- 使用Java Servlet进行简单登录
- Spring MVC 教程,快速入门,深入分析
- Java-1-简介
- SpringMVC存取Session的两种方法
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
- Struts(7)Action动作