Java SE中的交易种类

时间:2019-01-29 16:50:37

标签: java transactions java.util.scanner

有什么方法可以仅使用Java SE创建某种交易? 例如,我们有一些带有main和输入方法的类。我们要做的是在控制台中添加一些数字,将它们添加到列表中,然后返回此列表。但是,如果用户在5秒钟内未在控制台中输入任何数字-程序将清除我们的列表,返回此空列表并停止。

例如虚拟代码:

public class SomeClass {
    public static void main(String[] args) {
        inputNumbers().forEach(System.out::println);
    }

    public List<String> inputNumbers() {
        Scanner scanner = new Scanner(System.in);
        List<String> result = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            result.add(scanner.nextLine());

            //if nothing happen within 5 sec
            //result.clear();
            //return out empty result;    
        }

        return result;
    }
}

2 个答案:

答案 0 :(得分:1)

查看Java TimerTask类文档。提供了按计划执行此类操作的方法。

答案 1 :(得分:1)

这是使用计时器任务和AWT机器人的一种选择。

public class SomeClass {

    private volatile boolean exitFlag = false;

    public static void main(String[] args) {
        new SomeClass().inputNumbers().forEach(System.out::println);
    }

    public List<String> inputNumbers() {
        Scanner scanner = new Scanner(System.in);
        List<String> result = new ArrayList<>();
        Timer t = setTimer(5000);
        for (int i = 0; i < 10; i++) {
            result.add(scanner.nextLine());
            if(exitFlag) {
                break;
            }
        }
        scanner.close();
        t.cancel();
        return result;
    }

    private Timer setTimer(int delay) {
        Timer t = new Timer();
        t.schedule( 
                new java.util.TimerTask() {
                    @Override
                    public void run() {
                        Robot robot;
                        try {
                            robot = new Robot();
                            robot.keyPress(KeyEvent.VK_ENTER);
                            exitFlag = true;
                        } catch (AWTException e) {
                            e.printStackTrace();
                        }

                    }
                }, 
                delay 
        );
        return t;
    }
}