如何解决如何在一段时间后终止方法
我正在尝试做一个订票系统。 客户可以选择的方法之一是 makeOrder()。在这种方法中,他选择了票数,然后我想给他 10 分钟的时间来选择座位。如果他选择了它们并确认了订单,则该方法应该结束,他可以再次从 MainMenu 中选择选项。如果他在 10 分钟内没有选择座位,我想删除订单,通知他并向他展示 MainMenu。我不知道该怎么做。任何人都可以帮助我吗?
pseudocode
public class MainMenu{
public void handle(String option) {
switch (option) {
case "1": showScreenings(); break;
case "2": makeOrder(); break;
default: System.out.println("UnkNown option"); break;
}
}
private void makeOrder(){
// customer selects number of tickets and then order is created
Order order = new Order()
// here I want to give a customer 10 minutes to select seats so I tried it with Timer
// but it deletes the order but still waiting for the input of the customer
Timer t = new java.util.Timer();
t.schedule( new java.util.TimerTask() {
@Override
public void run() {
if (order.getorderedDateTime() == null){
try {
order.delete();
System.out.println("Time out");
} catch (sqlException throwables) {
throwables.printstacktrace();
}
}
t.cancel();
}
},TimeUnit.MINUTES.toMillis(10));
//code to select seats
BufferedReader br = new BufferedReader(new InputStreamReader(system.in));
String seats = br.readline() // if he doesnt select seats in 10 minutes I want to delete order
//reserve seats and confirm order
order.confirm();
}
}
解决方法
我认为“但仍在等待客户的输入”的意思是您需要某种 UI 反馈,因此您可以通过多种方式处理此问题,一种方法是您可以显示一个对话框,通知用户取消订单,并使用以下方法刷新活动(如果可能):
finish();
startActivity(getIntent());
,
据我所知,您希望等待 10 分钟以等待用户操作。如果他/她在 10 分钟内采取行动,那么您将继续确认订单。
如果用户在 10 分钟内未采取行动,您要删除订单。
您可以尝试在特定时间等待线程完成的 Future。
System.out.println("Wait 10 seconds to get user input");
StringBuilder stringBuilder = new StringBuilder();
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<?> future = executor.submit(()->{
//code to select seats
System.out.println("Enter Seat No: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
stringBuilder.append(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
});
try {
future.get(10,TimeUnit.SECONDS);
System.out.println("Seat selected. Let's confirm the order");
} catch (TimeoutException | ExecutionException e) {
future.cancel(true);
System.out.println("Time out Delete oder");
// delete order
} finally {
executor.shutdownNow();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。