微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在一段时间后终止方法

如何解决如何在一段时间后终止方法

我正在尝试做一个订票系统。 客户可以选择的方法之一是 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 举报,一经查实,本站将立刻删除。