private void runTime() {
final Action taskPerformer = new AbstractAction() { private static final long serialVersionUID = 1L; public void actionPerformed(ActionEvent evt) {
Display.getDefault().syncExec(new Runnable() {
public void run(){
                                            //执行内容
                                              } ;
}
}; timer = new Timer(1000, taskPerformer);
timer.start();
这是我的一段代码,写在一个界面上的。当这个界面打开时,就调用这个方法,在页面上实现每秒执行一次操作。后来扩展功能,当从这个页面跳转到别的页面时,我用的是shell.dispose(),将这个页面关闭。当我再次进入这个页面时,页面上的元素都在,但是就是不再执行这个操作,不知道是什么原因。求高手帮忙,能不能实现当我第二次进入这个界面时能够重新启动这个timer?谢谢!在线等。

解决方案 »

  1.   

    楼主为什么不在run方法中直接控制???sleep(1000);
      

  2.   

    当我再次进入这个页面时,页面上的元素都在,但是就是不再执行这个操作,不知道是什么原因
    进入这个页面的那段代码呢?
    *……#(@&%(
    算了,我猜测下吧
    用sendredirect重定向url,提交方式post
    或者直接在js里面用onclick写个方法,方法中用return xxx;false的方法
      

  3.   

    补充描述一下吧:
    如果想实现下面的功能,该如何进行?1、A界面上有一个timer,只要打开了A界面就开始运行此timer,使界面上存在的一个数字从0开始反复加1。
    2、timer的run()中有一个判断,当界面上的数字超过1000时,将此界面关闭或者dispose(),开启另外一个界面进行别的操作。在此之前停止timer工作。
    3、在另一个界面操作完毕之后,重新打开A界面,需要timer立刻重新启动开始工作。谢谢!使用的是SWT Designer, 界面的打开方式:
    A a = new A();
    a.open();
    public void open() {
    final Display display = Display.getDefault();
    createContents();
    shell.open();
    shell.layout();
    runTime();
    while (!shell.isDisposed()) {
    if (!display.readAndDispatch())
    display.sleep();
    }
    }
      

  4.   

    LZ看看报什么错了,或者两次进入A有什么不同?触发什么事情?
    你把代码贴全一些.
      

  5.   

    我感觉是dispose方法得原因,在其隐藏得时候释放掉了所有得资源,单在show得时候是不是只把显示信息弄出来了,用setvisible试试
      

  6.   

    java的GUI挺复杂的。。不好用还不好看。
      

  7.   

    使用的是SWT Designer, 界面的打开方式:
    A a = new A();
    a.open();
    public void open() {
    final Display display = Display.getDefault();
    createContents();
    shell.open();
    shell.layout();
    runTime();
    while (!shell.isDisposed()) {
    if (!display.readAndDispatch())
    display.sleep();
    }
    }
    如果是这样的话.. 你只是在启动的时候runTime(); 了一次. 再切回来肯定 runTime 就不会再启动了.
    你切换的时候要能再执行一次 runTime();
      

  8.   

    sleep(1000); 
    使用的是SWT Designer, 界面的打开方式:
    A a = new A();
    a.open();
    public void open() {
    final Display display = Display.getDefault();
    createContents();
    shell.open();
    shell.layout();
    runTime();
    while (!shell.isDisposed()) {
    if (!display.readAndDispatch())
    display.sleep();
    }
    }
    如果是这样的话.. 你只是在启动的时候runTime(); 了一次. 再切回来肯定 runTime 就不会再启动了. 
    你切换的时候要能再执行一次 runTime(); 这个好像要的