【问题标题】:Kind of transaction in Java SE [duplicate]Java SE中的事务类型[重复]
【发布时间】:2019-01-29 16:50:37
【问题描述】:

有没有什么方法可以只使用 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;
    }
}

【问题讨论】:

  • @MichałZiober 这个可能的重复也有可能的重复...
  • 是的,“重复”是很常见的事情。我指出它只是为了增加这个问题得到正确回答的机会。

标签: java transactions java.util.scanner


【解决方案1】:

这是一个使用 Timer 任务和 AWT Robot 的选项。

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;
    }
}

【讨论】:

  • 我认为你不应该依赖虚拟按键。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-01-30
    • 1970-01-01
    • 2020-09-01
    • 2012-01-06
    • 1970-01-01
    • 2013-05-30
    • 2020-12-19
    • 2012-08-01
    • 2012-01-12
    相关资源
    最近更新 更多