Java 为什么我会得到这个例外?
我正在运行我的程序,并试图从该程序运行的程序启动“帮助”菜单(如果有意义的话!)。但是我得到了一个“NoTouchElement”异常,在我的Java 为什么我会得到这个例外?,java,exception,Java,Exception,我正在运行我的程序,并试图从该程序运行的程序启动“帮助”菜单(如果有意义的话!)。但是我得到了一个“NoTouchElement”异常,在我的try{}catch()程序中都没有调用它! 我正在做的是; 运行程序。键入“create”以启动commandCreate类。然后我输入“帮助”启动“帮助”菜单。但是我得到了NoTouchElement例外。如果有人能帮助我,我的两个程序如下。多谢各位 main.java commandCreate.java 名为API的超类中可能存在问题。看那里。名为
try{}catch()
程序中都没有调用它!
我正在做的是;
运行程序。键入“create”以启动commandCreate类。然后我输入“帮助”启动“帮助”菜单。但是我得到了NoTouchElement例外。如果有人能帮助我,我的两个程序如下。多谢各位
main.java
commandCreate.java
名为API的超类中可能存在问题。看那里。名为API的超类中可能有问题。看那里。根据堆栈跟踪,问题在这里:
Scanner kbd = new Scanner(System.in);
String userLine = kbd.nextLine();
Scanner read = new Scanner(userLine);
option = read.next();
fileName = read.next(); // <--- exception here
Scanner kbd=新扫描仪(System.in);
字符串userLine=kbd.nextLine();
扫描仪读取=新扫描仪(用户线);
option=read.next();
fileName=read.next();// 根据堆栈跟踪,问题在于:
Scanner kbd = new Scanner(System.in);
String userLine = kbd.nextLine();
Scanner read = new Scanner(userLine);
option = read.next();
fileName = read.next(); // <--- exception here
Scanner kbd=新扫描仪(System.in);
字符串userLine=kbd.nextLine();
扫描仪读取=新扫描仪(用户线);
option=read.next();
fileName=read.next();//请发布您的异常StasTrror。不知道如何堆栈跟踪,真的。无关,但我强烈考虑使用模板库,而不是嵌入所有这些字符串。至少要将每个写入块重构到它们自己的方法中,以便更容易地处理主线代码。为了跟踪这些问题,您需要将println(“出现问题:+ex”)
更改为ex.printStackTrace()
,以及System.out.println(“出现错误:+e”)
到e.printStackTrace()
,依此类推。否则,您将无法获得有关异常的足够信息来了解发生了什么。(就此而言,您可能不应该捕获这些异常;或者至少,您的catch
-块应该重新抛出它们。如果您不知道它们是什么,而且您显然不知道,那么您如何知道吞下它们并继续呢?)请发布你的异常StActTracle。不确定如何跟踪StActTo,真的。无关,但我强烈考虑使用模板库,而不是嵌入所有的字符串。至少要将每个写的块重新分解成自己的方法,以便更容易地处理主线代码。ed将println(“出现问题:“+ex”)
更改为ex.printStackTrace()
,并将System.out.println(“出现错误:“+e”)
更改为e.printStackTrace()
,以此类推。否则,您将无法获得有关异常的足够信息以了解发生了什么。(就此而言,您可能不应该捕获这些异常;或者至少,您的catch
-块应该重新抛出它们。如果您不知道它们是什么,而且您显然不知道,那么您如何知道吞下它们并继续呢?)是的,我想这可能与那个扫描器有关。有没有办法让它只在有两个字符串的输入时运行“读取”扫描器?这样我就可以同时拥有两个if?@NathanKreider:我想你可以检查if(java.util.regex.Pattern.matches(“.\\s\\s+\\s.*,userLine))
。这将确保userLine
至少包含两个由空格分隔的非空格字符。这非常有效。谢谢!现在缩短它并使用导入。是的,我想这可能与扫描仪有关。有没有办法让它只运行“读取”命令扫描是否有两个字符串的输入?这样我就可以同时拥有两个if?@NathanKreider:我想你可以检查if(java.util.regex.Pattern.matches(“.\\s\\s+\\s.*”,userLine))
。这将确保userLine
至少包含两个由空格分隔的非空格字符。这非常有效。谢谢!现在缩短它并使用导入。API类仅包含3个方法,与任何方法都不冲突。API类仅包含3个方法,与任何方法都不冲突。
Scanner kbd = new Scanner(System.in);
String userLine = kbd.nextLine();
Scanner read = new Scanner(userLine);
option = read.next();
fileName = read.next(); // <--- exception here