【问题标题】:"Evaluation failed because the thread is not suspended" - what does this mean in the context of my code?“评估失败,因为线程没有挂起” - 这在我的代码上下文中意味着什么?
【发布时间】:2019-05-23 04:40:36
【问题描述】:

我最近才开始学习 Java,但我对 Scanner 类的工作方式有点困惑。我在我的程序中使用了 Scanner 类,现在我的代码在每次运行时都会引发错误。错误是“评估失败,因为线程没有挂起” - 这在我的代码上下文中是什么意思?

我开发了一个收集用户年龄的程序。为了保证用户提供号码,我使用的是.hasNextInt()的方法,会不断的检查直到用户提供号码。如下:

import java.util.Scanner;

public class test{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while (!scan.hasNextInt()){
            scan.next();
        }

        int age = scan.nextInt();

        System.out.println("You are " + age);
        scan.close();
    }
}

当我尝试运行我的代码时,会显示输入面板(如预期的那样),但是一旦我提供输入,我的屏幕上就会显示以下错误:“评估失败,因为线程未暂停。”为什么会这样?

【问题讨论】:

  • 您使用的是什么 IDE? This 看起来很像
  • 这很可能与您的 IDE 有关,您正在运行或调试您的代码,但由于某种原因 System.in(某些命令行)不可用

标签: java java.util.scanner


【解决方案1】:

此错误消息通常是在运行 VisualStudio 并且配置错误的 java 工具链时创建的。

发生的情况是您尝试在调试模式下运行程序,而该模式无法停止程序的执行(通过挂起主线程)。因此程序运行完成,IDE 引发错误“评估失败,因为线程未挂起”。

但该错误是 IDE 的错误,而不是程序的错误。你的程序不会挂起任何Threads,如果挂起,你就会把它写到代码中。

检查您是否安装了 JDK(如果使用旧版本的 Java)而不是 JRE。还要检查您在 VS 和您的编程支持工具(javac、javap 等)之间的集成是否正确。

或者我最喜欢的答案,使用更好的开发环境,与 Java 的成功息息相关,例如 NetbeansEclipse。 VS 与 C# 的成功息息相关,并且有一些最糟糕、最具误导性的错误消息(从历史上看,我认为这是为了支持他们声称 C# 是一种比 Java 更好的语言,尽管它最初是Java)。

【讨论】:

    【解决方案2】:

    从命令行运行您的程序: java test,看看它是否会抛出相同的错误。如果不是 - 则意味着问题出在您的 IDE 中。

    【讨论】:

    • 谢谢!我也很困惑几种 Scanner 方法在我的代码中是如何工作的。如果 while 循环条件(即 !scan.hasNextInt())在多次迭代中都为真,那么如果我提供了一个数字,那么 while 循环将退出并且 scan.nextInt() 将采用这个数字。请告诉我这是否正确?
    猜你喜欢
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2012-01-16
    • 2012-01-10
    • 1970-01-01
    相关资源
    最近更新 更多