- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我运行我的程序时,我在 Eclipse 控制台中得到了这个:
Type a number then press enter.
1. Add a customer
2. Add an order
3. Remove an order
4. Ship an order
5. Print pending orders with customer information
6. Restock parts
7. Exit
1
Loading driver...
Driver loaded!
Connecting database...
Database connected!
Enter 5 letters or less to identify the customer as.
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
我尝试过只使用一个扫描仪而不关闭它,但这不起作用。有人可以帮我弄清楚为什么我在行上收到此消息:tempCustID = Keyboard1.nextLine();
吗?奇怪的是,在上一行读取 int Seed = Keyboard.nextInt();
期间没有发生错误。
这是我的 Menu.java 类的代码:
import java.sql.Connection;
import java.sql.SQLException;
public class Menu {
public static void main(String[] args) throws SQLException {
// TODO Auto-generated method stub
DatabaseModifier session = new DatabaseModifier();
int seed = session.options();
Connection mycon = session.connectDB();
while(seed != 7) {
if(seed == 1) {
session.addCust(mycon);
}else if(seed == 2) {
//session.addOrder(mycon);
}else if(seed == 3) {
}else if(seed == 4) {
}else if(seed == 5) {
}else if(seed == 6) {
}else {
System.out.println("Invalid option.");
}
seed = session.options();
}
System.out.println("Good-bye.");
}
}
这是我的 DatabaseModifier.java 类的代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class DatabaseModifier {
public int options() {
System.out.println("Type a number then press enter.");
System.out.println("1. Add a customer");
System.out.println("2. Add an order");
System.out.println("3. Remove an order");
System.out.println("4. Ship an order");
System.out.println("5. Print pending orders with customer information");
System.out.println("6. Restock parts");
System.out.println("7. Exit");
Scanner keyboard = new Scanner(System.in);
int seed = keyboard.nextInt();
keyboard.close();
return seed;
}
public Connection connectDB() {
String url = "jdbc:mysql://localhost:3306/northwind?useSSL=false&serverTimezone=EST";
String username = "root";
String password = "password";
System.out.println("Loading driver...");
try {
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("Driver loaded!");
}catch (ClassNotFoundException e) {
throw new IllegalStateException("Cannot find the driver in the classpath!", e);
}
System.out.println("Connecting database...");
try {
Connection mycon = DriverManager.getConnection(url, username, password);
System.out.println("Database connected!");
return mycon;
} catch (SQLException e) {
throw new IllegalStateException("Cannot connect the database!", e);
}
}
public void addCust(Connection mycon) throws SQLException {
String tempCustID, custID, comp, contName, contTitle, addr, city, reg, postCode, country, phone, fax;
Scanner keyboard1 = new Scanner(System.in);
int correctInput = 0;
do {
PreparedStatement stat = mycon.prepareStatement("SELECT CustomerID FROM customers");
ResultSet cust = stat.executeQuery();
System.out.println("Enter 5 letters or less to identify the customer as.");
tempCustID = keyboard1.nextLine();
custID = tempCustID.toUpperCase();
while (cust.next()) {
String customerID = cust.getString("CustomerID");
if (custID.equals(customerID) || "".equals(custID) || "NULL".equals(custID) || "null".equals(custID) || custID.length() > 5) {
System.out.println(
"Customer ID already exists or you entered incorrect input. Please enter a different sequence of 5 letters or less to identify the customer as.");
}else
correctInput = 1;
}
}while(correctInput == 0);
correctInput = 0;
do {
PreparedStatement stat1 = mycon.prepareStatement("SELECT CompanyName FROM customers");
ResultSet comp1 = stat1.executeQuery();
System.out.println("Enter 40 letters or less to identify the company name.");
comp = keyboard1.nextLine();
while (comp1.next()) {
String compName = comp1.getString("CompanyName");
if (compName.equals(comp) || "".equals(comp) || "NULL".equals(comp) || "null".equals(comp) || comp.length() > 40) {
System.out.println(
"Company name already exists or you entered incorrect input. Please enter a different sequence of 40 letters or less to identify the company as.");
}else
correctInput = 1;
}
}while(correctInput == 0);
correctInput = 0;
do {
System.out.println("Enter 30 letters or less to identify the contact's first and last name.");
contName = keyboard1.nextLine();
if ("".equals(contName) || "NULL".equals(contName) || "null".equals(contName) || contName.length() > 30) {
System.out.println("Incorrect input.");
}else
correctInput = 1;
}while(correctInput == 0);
correctInput = 0;
do {
System.out.println("Enter 30 letters or less to identify the contact's job title.");
contTitle = keyboard1.nextLine();
if ("".equals(contTitle) || "NULL".equals(contTitle) || "null".equals(contTitle) || contTitle.length() > 30) {
System.out.println("Incorrect input.");
}else
correctInput = 1;
}while(correctInput == 0);
correctInput = 0;
do {
System.out.println("Enter 60 letters or less to identify the company's address.");
addr = keyboard1.nextLine();
if ("".equals(addr) || "NULL".equals(addr) || "null".equals(addr) || addr.length() > 60) {
System.out.println("Incorrect input.");
}else
correctInput = 1;
}while(correctInput == 0);
correctInput = 0;
do {
System.out.println("Enter 15 letters or less to identify the company's city.");
city = keyboard1.nextLine();
if ("".equals(city) || "NULL".equals(city) || "null".equals(city) || city.length() > 15) {
System.out.println("Incorrect input.");
}else
correctInput = 1;
}while(correctInput == 0);
correctInput = 0;
do {
System.out.println("Enter 15 letters or less to identify the company's region.");
reg = keyboard1.nextLine();
if ("".equals(reg) || "NULL".equals(reg) || "null".equals(reg) || reg.length() > 15) {
System.out.println("Incorrect input.");
}else
correctInput = 1;
}while(correctInput == 0);
correctInput = 0;
do {
System.out.println("Enter 10 letters or less to identify the company's postal code.");
postCode = keyboard1.nextLine();
if ("".equals(postCode) || "NULL".equals(postCode) || "null".equals(postCode) || postCode.length() > 10) {
System.out.println("Incorrect input.");
}else
correctInput = 1;
}while(correctInput == 0);
correctInput = 0;
do {
System.out.println("Enter 15 letters or less to identify the company's country.");
country = keyboard1.nextLine();
if ("".equals(country) || "NULL".equals(country) || "null".equals(country) || country.length() > 15) {
System.out.println("Incorrect input.");
}else
correctInput = 1;
}while(correctInput == 0);
correctInput = 0;
do {
System.out.println("Enter 24 letters or less to identify the company's phone number.");
phone = keyboard1.nextLine();
if ("".equals(phone) || "NULL".equals(phone) || "null".equals(phone) || phone.length() > 24) {
System.out.println("Incorrect input.");
}else
correctInput = 1;
}while(correctInput == 0);
correctInput = 0;
do {
System.out.println("Enter 24 letters or less to identify the company's fax.");
fax = keyboard1.nextLine();
if ("".equals(fax) || "NULL".equals(fax) || "null".equals(fax) || fax.length() > 24) {
System.out.println("Incorrect input.");
}else
correctInput = 1;
}while(correctInput == 0);
keyboard1.close();
PreparedStatement newCust = mycon.prepareStatement(
"INSERT INTO customers" + "(CustomerID, CompanyName, ContactName, ContactTitle, Address, "
+ "City, Region, PostalCode, Country, Phone, Fax)" + "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
newCust.setString(1, custID);
newCust.setString(2, comp);
newCust.setString(3, contName);
newCust.setString(4, contTitle);
newCust.setString(5, addr);
newCust.setString(6, city);
newCust.setString(7, reg);
newCust.setString(8, postCode);
newCust.setString(9, country);
newCust.setString(10, phone);
newCust.setString(11, fax);
newCust.executeUpdate();
}
最佳答案
扩展并澄清 user3170251 的评论,关闭 Scanner
也会关闭底层数据源(如果该源实际上Closeable
):
If this scanner has not yet been closed then if its underlying readable also implements the Closeable interface then the readable's close method will be invoked. If this scanner is already closed then invoking this method will have no effect.
作为一个InputStream
,您的输入源System.in
确实是Closeable
。一旦关闭,它就关闭了——即使您将其包装在新的扫描仪中,也无法从中读取任何内容。这就是第二次及后续调用 DataBaseModifier.options()
抛出异常的原因。
解决方案是避免关闭System.in
。此外,最安全的做法是重用单个 Scanner
而不是创建一个新的,因为数据可能会缓冲在 Scanner
内,并在关闭它时丢失。有多种方法可以解决该问题,但一种非常简单的方法是使您的 Scanner 成为实例变量而不是局部变量。在实例化类时对其进行初始化,并使其永远保持打开状态。
关于java - 为什么我收到 NoSuchElementException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53231604/
此查询由 2 个相关问题组成。在进行下一步之前,我需要等待元素不可见,因此我尝试定义一个自定义方法,如下所示: public void waitToDisappear(long timeOutInSe
所以我有一个一年前编写的相当大的 java 应用程序,我试图再次理解它。我正在查看代码中的一个方法,其中明显存在出现 NoSuchElementException 的风险:我正在使用任意字符串构造的扫
我开始通过简单地读取数据文件来做练习。当我运行该程序时,数据文件被读取但没有读取,但出于某种原因我仍然收到“NoSuchElementException”并且我的输出没有按照预期的方式格式化。这是正在
我正在尝试逐行读取一个大型 csv 文件,以查找其中字符串出现的次数。 这是执行此操作的代码: public int getOffset(File file, String searched) thr
我的代码在使用扫描仪的每一行上都给出了 NoSuchElementException 异常。我的其余代码工作正常。 import java.io.*; import java.util.*; impo
当我运行我的程序时,我在 Eclipse 控制台中得到了这个: Type a number then press enter. 1. Add a customer 2. Add an order 3.
我想知道是否有人可以帮助解决我的程序中的 NoSuchElements 异常,该程序扫描非常大的文本,然后将其添加到 ArrayList 中。 我尝试重新排列代码的顺序,看看是否可以修复它,但现在我不
for (final ArrayList smartPhones : smartPhonesCluster) { new Thread(new Runnable() { @Ov
我想在客户端读取时设置超时。该例程应该抛出 InterruptedIOException,但它在 System.out.println("echo: " + _in.nextLine()); 上抛出
我在功能检查冲突方面遇到问题。无论我做什么,它都会抛出 NoSuchElementException。这是: public boolean isColliding(Pixel a) { if(
如果在读取文件时缺少字段,我应该捕获 NoSuchElementException。如果缺少一个字段,我只需要跳到文件的下一行。我的问题是,我在哪里实现我的 try/catch 代码来做到这一点?这是
我正在开发一种解析器(业余爱好项目),它采用 Cpp 文件,读取文件中的注释,然后尝试基于该文件创建头文件。 我面临的问题是当java.util.Scanner即将读取第一行时。程序停止并给出 NoS
我的任务是: 创建一个包含 2 列数字的文件:距离和速度。 编写一个 TravelInfo 类,其中包含三部分信息:速度、时间、距离。 该类还应该有一个方法 calcTime(),用于根据距离和速度计
在过去的几个小时里,我一直对迭代器感到震惊。 当我执行Iterator时,得到NoSuchElementException 代码 new Thread() { @Overrid
我尝试了许多不同的方法来修复该错误。我知道这与 hasNext 有关,我只是不确定错误在哪里。请帮忙。另外,如果有人能告诉我如何从 getLargestQuantityItem 方法将变量larges
代码在 Gitbash 命令行 (GitHub) 中正确运行。但是,当我在 NetBeans 中编译并运行它时,它给出了 NoSuchElement Exception。如果有人可以帮助我使用 Net
从队列中删除时,我有时会收到 NoSuchElementException 。我需要使用锁/等待/其他一些延迟机制吗? 我提供了代码的粗略翻译。 带队列的线程 public void run(){ w
如何删除代码中的 NoSuchElementException ?我也在应用 hasNextLine 但它也没有接受它。 public static void main (String[] a
我已经做了一些研究,但一无所获。 这是我的代码: public void play(){ System.out.print("Make your choice ( R - P - S) : "
自从我醒来以来,我一直在尝试让它工作,但我根本无法弄清楚是什么导致了这个异常。 try { scan = new Scanner(new File("dictionary.txt"))
我是一名优秀的程序员,十分优秀!