Есть ли способ создать вид транзакций, используя только 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;
}
}
Да, "дублирование" - обычное дело. Я указал на это только для того, чтобы увеличить вероятность того, что на этот вопрос будет дан правильный ответ.




Взгляните на документацию класса Java TimerTask. Предусмотрены методы для выполнения таких вещей по расписанию.
Вот один из вариантов использования задачи Timer и робота 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;
}
}
Я не думаю, что вы должны полагаться на виртуальное нажатие клавиши в этом отношении.
@MichałZiober У этого возможного дубликата также есть возможный дубликат ...