如何让thread.sleep工作

时间:2014-03-31 19:57:46

标签: java

在我的下面的代码中,我想添加一个thread.sleep,当有人选择退出电梯的选项时,我不确定我输入的代码是什么错误让它睡觉。我已经包含了Interrupted异常所以谁能告诉我哪里出错了。

import java.util.Arrays;
import java.util.Scanner;

public class username{

    public static void main(String... args) throws InterruptedException {

        String[] verifiedNames = { "barry", "matty", "olly", "joey" };
        System.out.println("choose an option");
        System.out.println("Uselift(1)");
        System.out.println("see audit report(2)");
        System.out.println("Exit Lift(3)");

        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();

        switch (choice) {
            case 1:
            scanner.nextLine(); // get '\n' symbol from previous input
            int nameAttemptsLeft = 3;
            while (nameAttemptsLeft-- > 0) {
                System.out.println(" Enter your name ");
                String name = scanner.nextLine();

                if (Arrays.asList(verifiedNames).contains(name)) {
                    System.out.println("dear " + name + " you are verified " +
                    "you may use the lift, calling lift ");
                    break; // break out of loop
                }
            }
            if (nameAttemptsLeft < 0) {
                System.out.println("Username Invalid");
            }
            break;

            case 2:
            System.out.println("option 2");
            break;
            case 3:
            System.out.println(" Please Exit Lift ");
            Thread.sleep(5000);
            System.exit(0);
            break;
        }

2 个答案:

答案 0 :(得分:1)

您在sleep返回后结束您的计划。

Thread.sleep(5000);
System.exit(0);

也许你正在寻找某种循环。你还没有向我们展示switch之后发生的事情,但也许System.exit(0)停止了java进程,不应该在那里。

答案 1 :(得分:1)

摆脱System.exit(0)

如果要循环,请将方法包装在循环中。我的例子是一个无限循环,但是如果你的应用程序接受用户输入,你可以很容易地得到一个布尔标志作为循环条件。

public static void main(String... args) throws InterruptedException {
    while(true){
    //all of your code
    }
}

此外,你应该在try-catch中包围你的睡眠而不是在你的main方法上声明一个抛出...这是一个很好的做法,捕获你可以处理的异常,并抛出你无法处理的早期堆栈帧的异常。通常,您不希望main()方法具有throws子句,因为它可能导致应用程序提前终止。这在您的具体案例中对InterruptedException并不重要,但对许多其他例外情况也是如此。