首页 > 解决方案 > 打印文本直到设置的时间用完

问题描述

在这里,我有一个每 5 秒打印一次文本的程序。但我还需要它在这 5 秒内打印数据。

例如:

做手势 1

(这里用户正在做手势,我需要打印所有数据直到 5 秒过去)

做手势 2

(打印所有数据直到 5 秒过去)

等等。

我尝试添加一个计数器,但它只打印数据 5 次,然后再次等待 5 秒通过。但我想在这 5 秒过去时打印数据。

int i = 1;
Timer t = new Timer();
        t.schedule(new TimerTask() {
            @Override
            public void run() {
                if (i == 13) {
                    Thread.currentThread().stop();
                } else {
                    if (i % 2 != 0) {
                        System.out.println("Make gesture 1");
                        int currentSec = 0;
                        while (currentSec < 6) {
                            System.out.println("gesture data");
                            currentSec++;
                        }
                        i++;
                    } else {
                        System.out.println("Make gesture 2");
                        int currentSec = 0;
                        while (currentSec < 6) {
                            System.out.println("gesture data");
                            currentSec++;
                        }
                        i++;
                    }
                }

            }
        }, 0, 5000);

有没有办法获取 TimerTask 的剩余时间并在循环中使用该时间?如果没有,我还能怎么做?

输出示例:

做手势 7

-6、-4、1、-2、-3、0、-1、1、7

3、-2、-4、3、-1、-2、-1、-3、7

7、5、-3、1、-1、-2、0、5、7

0, -2, 0, 2, -1, -1, 3, 0, 7

0, -2, 0, 2, -1, -1, 3, 0, 7

-2、-3、0、-4、-5、-3、-1、1、7

-2、-3、0、-4、-5、-3、-1、1、7

-2、-3、0、-4、-5、-3、-1、1、7

2、-1、0、2、-1、0、-2、-1、7

-1, 0, -2, -5, -2, 0, -1, 0, 7

1、1、0、-6、-2、-1、-1、-1、7

-3、-1、-3、-1、2、0、0、-3、7

2、2、3、-2、0、-1、-2、3、7

-3、-1、5、2、2、0、-1、-3、7

-3、-1、5、2、2、0、-1、-3、7

. . .

做手势0:

4, -10, -10, 5, 21, 3, 10, 0, 0

12、6、15、10、13、-35、-1、24、0

-5、9、1、-2、-1、-6、-18、-9、0

-5、9、1、-2、-1、-6、-18、-9、0

-5、9、1、-2、-1、-6、-18、-9、0

1、-14、-1、-3、-29、-6、8、2、0

-22、-20、-8、-6、-7、-2、3、-9、0

1、0、1、1、-5、-4、4、14、0

0、2、-5、0、-4、1、-30、-19、0

0, 2, -6, -4, 6, 5, 2, 6, 0

-3、1、-1、-3、7、-2、-9、1、0

-3、1、-1、-3、7、-2、-9、1、0

-3、1、-1、-3、7、-2、-9、1、0

10、21、-1、-1、-2、-4、-8、2、0

3、5、2、4、-14、-38、-11、0、0

-3、4、9、4、55、59、27、2、0

-3、-12、-10、-3、-2、0、8、-5、0

-3、-12、-10、-3、-2、0、8、-5、0

-1、-11、-3、-2、5、-6、-18、3、0

2, -9, 0, 2, 22, 13, 2, -4, 0

...

我设法通过在 if 和 else 中使用 Thread 来做到这一点,但是有没有更好的方法呢?

       if (i % 2 != 0) {
            System.out.println("Make gesture 1");
            final long pastTime = System.currentTimeMillis();
            Thread t1 = new Thread(new Runnable() {
                @Override
                public void run() {
                    while (true) {
                        System.out.println(data);
                        long currTime= System.currentTimeMillis();
                        if (currTime>= (pastTime + 5 * 1000)) {
                            Thread.currentThread().stop();
                        }
                    }
                }
            });
            t1.start();
            i++;
        }

标签: javatimertimertask

解决方案


推荐阅读