【问题标题】:Exception in thread "main" java.util.NoSuchElementException: No line found Runs fine in bluej but not windows [duplicate]线程“main”java.util.NoSuchElementException中的异常:找不到行在bluej中运行良好但在windows中运行良好[重复]
【发布时间】:2021-03-05 08:22:58
【问题描述】:

我遇到了一个奇怪的问题。所以我使用 BlueJ 作为我的代码编辑器,它可以很好地运行我的代码。当我创建一个 jar 文件并运行它时,程序会抛出 ““main”java.util.NoSuchElementException 中的异常:找不到行”

我在这里有两个问题:

  1. 为什么我的代码在 BlueJ 中运行得很好,但在其他运行时环境或编辑器(如 Visual Studio Code)中却没有?

  2. 还有为什么它完全失败了?

为了让每个人都知道,我压缩了代码并删掉了一些部分。问题依然存在。

import java.util.*;
import java.util.Scanner;
import java.io.*;
/**
* Write a description of class mainBody here.
*
* @author (Brayden Anderson)
* @version (a version number or a date) 
*/
public class mainBody{
    public static ArrayList<String> Messages = new ArrayList<String>();
    public static ArrayList<String> changeLog = new ArrayList<String>();
    /**
     * mainBody Constructor
     * Setup Menu
     */
    public mainBody(){
        Scanner scan = new Scanner(System.in); 
        System.out.println("Welcome to Solar!");
        System.out.println("========================================");
        System.out.println("1. Start Setup");
        System.out.println("2. Quit Program");
        System.out.println("Console: ");
        System.out.println("[System]: Please Start Setup to Proceed");
        String selection = scan.nextLine();
        scan.close();
        if(selection.equals("1")){
            System.out.println("Starting Setup");
        }else if(selection.equals("2")){
            System.exit(1);
        }else{
            new mainBody();
        }
    }
    /**
     * Method main
     *
     * @param args A parameter
     */
    public static void main(String[] args) {
        new mainBody();
    }
} 

在 powershell/CMD 中输出:

欢迎来到太阳能!

  1. 开始设置
  2. 退出程序

控制台:[系统]:请启动安装程序以继续 1

Bluej 中的输出:

欢迎来到太阳能!

  1. 开始设置
  2. 退出程序控制台:[系统]:请启动安装程序以继续 1

【问题讨论】:

  • 我猜在 powershell 中你只是按 Enter 而不输入任何数字。您应该检查扫描仪是否存在有效输入:Scanner: No line found
  • 根据您发布的内容,当您在 PowerShell 或 cmd 中运行代码时,文件 Setup.java 中的第 309 行(间接)抛出异常。我假设您编写了一个名为Setup 的类。不幸的是,我在您的问题中找不到该类的代码,因此无法进一步帮助您。
  • 对于它的价值,当我运行您问题中的代码时,我确实没有得到任何错误。假设您还没有这样做,我建议您阅读How to create a Minimal, Reproducible Example
  • @Abra 因此,在 Setup 类中,它所做的只是在询问您是否要在 C 驱动器上安装目录之前打开扫描仪类的新实例......所以 mainBody 类有一个实例然后 Scanner 在调用安装程序类之前将其关闭。所以它之前所做的并不是在调用 Setup 类之前关闭扫描仪。所以我之前添加了一个近距离呼叫扫描仪,现在问题发生在那里
  • 如果您需要帮助调试您的代码,那么我只能在您发布它时为您提供帮助(最好在您的问题中作为文本)。正如我在之前的评论中所写,尝试发布minimal reproducible example。 (请阅读该链接,因为我相信它会帮助您获得答案)。

标签: java exception nosuchelementexception


【解决方案1】:

首先不要像here中提到的那样关闭扫描仪。

其次,如果您没有以这种方式进行配置,那么看起来您正在使用的 BlueJ 正在神奇地提供所需的依赖项。其余的工具并没有做到这一点。在任何情况下,您都应该无法继续,这才是重点。

【讨论】:

  • 谢谢。我想我明白现在发生了什么。我只关闭了它,因为每当我使用 Visual Studio 代码时,它声称那里存在资源泄漏。我将删除所有 scan.close() 调用,看看是否有效
【解决方案2】:

所以谢谢大家的帮助。问题是扫描仪的关闭。我删除了所有关闭并创建了一个类来处理所有扫描仪的东西。然后我将所有输入实例路由到新类。所以谢谢你!

【讨论】:

    猜你喜欢
    • 2013-02-12
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多