线程“main”中的异常java.util.NoSuchElementException扫描程序读取文本文件时

时间:2017-09-27 17:45:49

标签: java error-handling exception-handling java.util.scanner

我试图在我的程序中实现Scanner搜索文本文件,直到找到与它正在搜索的字符串相同的行。 我一直收到以下错误:

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)
    at hangman.HangmanArr.<init>(HangmanArr.java:62)
    at hangman.HangmanApp.main(HangmanApp.java:18)

扫描仪的代码是:

if(ans.equals(“A”)){         username = JOptionPane.showInputDialog(null,“输入usesrname:”,“登录1/2”,JOptionPane.QUESTION_MESSAGE);

    try {
        Scanner scFile = new Scanner(new File("TextFileB.txt"));

        String line = scFile.nextLine();
        int flse = 0;
        String user = " ";

        while (scFile.hasNext() || flse == 0) {
            line = scFile.nextLine();
            Scanner scLine = new Scanner(line).useDelimiter("#"); 
            user = scFile.next();
            if (user.equals(username)) {
                password = JOptionPane.showInputDialog(null, "Welcome " + username + ". \n Please enter your password to play", "Login 2/2", JOptionPane.QUESTION_MESSAGE);
                flse++;

            }

        }
        scFile.close();

    } catch (IOException i) {
        System.out.println("Text File could not be found");
    }
}

并且该类的完整代码是:

package hangman;

import java.io.*;
import javax.swing.*;
import java.util.*;

/**
 *
 * @author ghost
 */
public class HangmanArr {

    String letter;
    int x = 0;
    String word;
    String dashWord;
    String newWord;
    String username;
    String password;
    private Hangman[] arrUsers = new Hangman[100];

    public HangmanArr() {
        JOptionPane.showInputDialog(null, "The aim of Hangman is to form "
                + "a word \nby guessing individual letters \nof the word "
                + "before a"
                + " hanging man \nand gallows are built. Every letter\n "
                + "that is entered "
                + "which does not \nappear in the word will contribute to "
                + "\nthe hanging"
                + " man and gallows; by adding \na single component to "
                + "drawing – \nif the hanging "
                + "man and gallows are \ncomplete before guessing the "
                + "complete word;\n you have lost "
                + "the game. Goodluck!" + "\nPress Enter to continue", "H_NGM_N", JOptionPane.INFORMATION_MESSAGE);
        String ans = " ";

        ans = JOptionPane.showInputDialog(null, "Please enter an option of "
                + "your choice\n"
                + "A – login\n"
                + "B - Sign up\n"
                + "C - Scoreboard\n"
                + "D - quit", "Menu A", JOptionPane.QUESTION_MESSAGE).toUpperCase();

        if (ans.equals("A")) {
            username = JOptionPane.showInputDialog(null, "Enter usesrname:", "Login 1/2", JOptionPane.QUESTION_MESSAGE);

            try {
                Scanner scFile = new Scanner(new File("TextFileB.txt"));

                String line = scFile.nextLine();
                int flse = 0;
                String user = " ";

                while (scFile.hasNext() || flse == 0) {
                    line = scFile.nextLine();
                    Scanner scLine = new Scanner(line).useDelimiter("#"); 
                    user = scFile.next();
                    if (user.equals(username)) {
                        password = JOptionPane.showInputDialog(null, "Welcome " + username + ". \n Please enter your password to play", "Login 2/2", JOptionPane.QUESTION_MESSAGE);
                        flse++;

                    }

                }
                scFile.close();

            } catch (IOException i) {
                System.out.println("Text File could not be found");
            }
        }


        if (ans.equals("B")) {
            username = JOptionPane.showInputDialog(null, "Enter usesrname:", "Sign Up 1/2", JOptionPane.QUESTION_MESSAGE);
            password = JOptionPane.showInputDialog(null, "Welcome " + username + ". \n Please enter your password to play", "Sign Up 2/2", JOptionPane.QUESTION_MESSAGE);
            File add = new File("TextFileB.txt");
            try {
                PrintWriter fw = new PrintWriter(new FileWriter(add, true));
                fw.write(username + "#" + password + "#");
                fw.println();
                fw.close();
            } catch (IOException e) {
                System.out.println("Could not locate text file to store data");
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的while条件存在问题。

如果您在未找到用户名的情况下到达文件末尾,则flse的值仍为0,因此将评估循环条件true,这意味着您将达到导致scFile.nextLine()的{​​{1}}来电,因为您已到达文件末尾。

您必须将该条件更改为:

NoSuchElementException