2014-01-25 22 views
1

我有以下几点:禁止和解锁方法的Java

public static void menu() throws java.io.IOException{ 
     int option; 
     do{ 
      out.println("1. Sing"); 
      out.println("2. Eat"); 
      out.println("3. Sleep"); 
      out.println("4. Wake up"); 
      out.println("6. Out"); 
      option=Integer.parseInt(in.readLine()); 
      selOption(option); 
     } while (opcion != 6); 
    } 

public static void selOption (int option) throws java.io.IOException { 
     switch (option){ 
      case 1: 
       objectVariable.sing(); 
       break; 
      case 2: 
       eat(); 
       break; 
      case 3: 
       sleep(); 
       break; 
      case 4: 
       wakeUp(); 
       break; 
      default: 
       break; 
     } 
    } 

我要找的是,如果我选择睡眠(),将禁用开关的前两个选项的方法(唱( )和eat()),但是如果我选择wakeUp(),将再次启用这两个选项。

我知道CountDownLatch可能工作,但我不知道如何正确使用它。在CountDownLatch

参考: Implement a blocking function call in Java

谢谢。

+1

这是我无法理解为什么你会寻找到CountDownLatch这个当前状态(睡着了,醒)。 –

+0

@ peter.petrov我很确定OP不知道术语“阻塞”是什么意思。 – chrylis

+0

@chrylis我认为我应该使用启用和禁用,不阻止或取消阻止 – W4rlord08

回答

2

只记得在一个布尔变量

public static void menu() { 
     int option; 
     boolean sleeping = false; 
     do{ 
      out.println("1. Sing"); 
      out.println("2. Eat"); 
      out.println("3. Sleep"); 
      out.println("4. Wake up"); 
      out.println("6. Out"); 
      option=Integer.parseInt(in.readLine()); 
      sleeping = selOption(option, sleeping); 
     } while (option != 6); 
    } 

public static boolean selOption (int option, boolean sleeping) { 
     switch (option){ 
      case 1: 
       if(!sleeping) objectVariable.sing(); 
       return sleeping; 
      case 2: 
       if(!sleeping) eat(); 
       return sleeping; 
      case 3: 
       sleep(); 
       return true; 
      case 4: 
       wakeUp(); 
       return false; 
      default: 
       return sleeping; 
     } 
    } 
+0

优秀!它完全按照我的意愿工作,谢谢! – W4rlord08