【问题标题】:How to terminate method after time如何在一段时间后终止方法
【发布时间】:2021-04-03 11:18:38
【问题描述】:

我正在尝试做一个订票系统。 客户可以选择的方法之一是 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();
}
}

【问题讨论】:

    标签: java time terminate


    【解决方案1】:

    据我了解,您希望等待 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();
            }
    

    【讨论】:

    • 是的,我正在寻找类似的东西。非常感谢!
    【解决方案2】:

    我认为“但仍在等待客户的输入”的意思是您需要某种 UI 反馈,因此您可以通过多种方式处理此问题,一种方式是您可以显示一个对话框,通知用户订单取消,并刷新活动(如果可能)使用:

    finish();
    startActivity(getIntent());
    

    【讨论】:

    • 这有什么关系?
    猜你喜欢
    • 2019-09-07
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2017-03-27
    相关资源
    最近更新 更多