线程" main"中的例外情况从菜单类中的switch调用方法时

时间:2016-09-24 08:02:55

标签: java

我的问题是: 当我试图调用方法newFile.createYear();来自菜单终端的开关打印错误:

def +[B1 >: B](elem1: (A, B1), elem2: (A, B1), elems: (A, B1)*): HashMap[A, B1]

Adds two or more elements to this collection and returns a new collection.


val result_tags = HashMap[String,Int]()

val result_tags_filled = result_tags + ("video"->0,"game"->0,"news"->0,"ee"->0,"sport"->0,
  "shop"->0,"ju"->0,"story"->0,"pho"->0,"con"->0,"live"->0,"life"->0,"soft"->0,"hire"->0,"car"->0,
  "mm"->0,"mus"->0,"mob"->0,"male"->0,"heal"->0, "sca"->0,"bank"->0,"mail"->0,"cool"->0,"pict"->0, "dl"->0)

当我在eclipse中运行程序时,问题不会发生。我在终端输入Exception in thread "main" java.lang.NullPointerException at com.register.file.CreateFile.showYears(CreateFile.java:140) at com.register.file.CreateFile.createYear(CreateFile.java:30) at com.register.main.Menu.registers(Menu.java:30) at com.register.main.Menu.menu(Menu.java:132) at com.register.main.Main.main(Main.java:14) 来运行程序。

此外,当我在调用方法后尝试返回上一级菜单时(即使在Eclipse中):

来自switch的代码部分:

java com.register.main.Main

https://github.com/JakubKacperski/Register

1 个答案:

答案 0 :(得分:0)

检查方法CreateFile中的班级showYears()中是否存在“注册”目录:

    File yearsDirs = new File("Registers"); 

    if (!yearsDirs.exists()){ //Create "Registers" when it does not exists.
        yearsDirs.mkdir();
    }

    File[] dirs = yearsDirs.listFiles();

    for (File dir : dirs) {
        if (dir.isDirectory()) {
            System.out.print("Registers ");
        } else {
            System.out.print("Register ");
        }
        try {
            System.out.println(dir.getName());
        } catch (Exception e) {
            System.out.println("Error.");
        }
    }

如果没有检查,则在调用.listFiles()时会出现NullPointerException,因为目录“Registers”不存在。 在Eclipse中,您可能在项目Register下有一个“Registers”目录。从终端呼叫时,你可能没有。

<小时/> 根据OP的评论:你可以编写一个循环:

public class Main {

    public static void main(String[] args) {

        Menu newMenu = new Menu();

        boolean continuePlaying = newMenu.menu();

        while (continuePlaying) {
            continuePlaying = newMenu.menu();
        }
    }

}

将您的方法menu()的返回类型更改为boolean而不是void

<小时/> 此外,您正在使用多个Scanner。我建议只使用一个。当您关闭Scanner时,它看起来也会关闭其他的createYear()。在课程CreateFile中的方法reader.close()中,您最后会调用NoSuchElementException。当我删除该行时,上述循环完美无缺。当我按原样使用时,我会得到<ul> <li *ngFor="let c of myHtmlItems" [innerHTML]='c.myHtml'></li> </ul> ,就像你得到的那样。