Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 时间过后如何终止方法_Java_Time_Terminate - Fatal编程技术网

Java 时间过后如何终止方法

Java 时间过后如何终止方法,java,time,terminate,Java,Time,Terminate,我在试着做一个售票系统。 客户可以选择的方法之一是makeOrder()。在这个方法中,他选择票的数量,然后我想给他10分钟来选择座位。如果他选择了它们并确认了顺序,那么方法应该结束,他可以再次从主菜单中选择选项。如果他在10分钟内没有选择座位,我想删除订单,通知他并显示主菜单。我不知道怎么做。谁能帮帮我吗 pseudocode public class MainMenu{ public void handle(String option) { switch (option) {

我在试着做一个售票系统。 客户可以选择的方法之一是makeOrder()。在这个方法中,他选择票的数量,然后我想给他10分钟来选择座位。如果他选择了它们并确认了顺序,那么方法应该结束,他可以再次从主菜单中选择选项。如果他在10分钟内没有选择座位,我想删除订单,通知他并显示主菜单。我不知道怎么做。谁能帮帮我吗

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();
        }
System.out.println(“等待10秒以获取用户输入”);
StringBuilder StringBuilder=新的StringBuilder();
ExecutorService executor=Executors.newSingleThreadExecutor();
未来=执行者。提交(()->{
//选择座位的代码
System.out.println(“输入座位号”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
试一试{
追加(br.readLine());
}捕获(IOE异常){
e、 printStackTrace();
}
});
试一试{
future.get(10,时间单位:秒);
System.out.println(“已选择座位,让我们确认订单”);
}catch(TimeoutException | ExecutionException e){
future.cancel(true);
System.out.println(“超时删除顺序”);
//删除订单
}最后{
执行者。关机现在();
}

这有什么关系?是的,我在找类似的东西。谢谢!