Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从XML文件加载时出现问题_Java_Xml - Fatal编程技术网

Java 从XML文件加载时出现问题

Java 从XML文件加载时出现问题,java,xml,Java,Xml,我有个大问题。我们可以将此应用程序称为船俱乐部系统,它是UML课程中的一项作业。但真正困扰我的问题是,我无法将成员对象加载回导出和导入对象时使用的Arraylist 我的一个朋友帮了我一些忙,但是导入不起作用。 这是我在尝试导入时遇到的错误 Exception in thread "main" java.lang.NullPointerException at boat.Controller.SystemController.readFromSystem(SystemController.jav

我有个大问题。我们可以将此应用程序称为船俱乐部系统,它是UML课程中的一项作业。但真正困扰我的问题是,我无法将成员对象加载回导出和导入对象时使用的Arraylist

我的一个朋友帮了我一些忙,但是导入不起作用。 这是我在尝试导入时遇到的错误

Exception in thread "main" java.lang.NullPointerException
at boat.Controller.SystemController.readFromSystem(SystemController.java:288)
at boat.Controller.SystemController.<init>(SystemController.java:26)
at boat.View.Console.<init>(Console.java:17)
at BoatMain.main(BoatMain.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
指向整个应用程序的链接。

系统控制器类如下所示。 顺便说一句,我正在考虑将这个类拆分为更像系统控制器和成员控制器的类,以实现更高内聚/低耦合的设计。但只有在导入操作正常时

我不知道为什么它不起作用。成员id最初是一个整数,但在导出时会转换为字符串。导入时,它会再次转换为Int。所以我想知道是不是出了什么问题

非常感谢您的帮助,我可以继续。 系统控制器

public void readFromSystem () {

    File file = null;
    Builder builder = null;
    Document doc = null;

    try {

        file = new File(filePath);
        builder = new Builder();
        doc = builder.build(file);

        Element root = doc.getRootElement();

        Elements members = root.getChildElements();


        for (int i = 0; i < members.size(); i++) {

            Elements element = members.get(i).getChildElements();
            Member member = new Member();

            member.setMemberId(Integer.parseInt(element.get(i).getAttribute("memberId").getValue()));
            member.setPersonId(element.get(0).getValue());
            member.setName(element.get(1).getValue());

            memberList.add(member);

            if (members.get(i).getChildElements().size() == 3) {

                Elements boats = element.get(2).getChildElements();

                for (int j = 0; j < boats.size(); j++) {

                    Boat b = new Boat();

                    b.setBoatId(Integer.parseInt(boats.get(j).getAttribute("boatId").getValue()));
                    b.setBoatType(Integer.parseInt(boats.get(j).getChildElements().get(1).getValue()));
                    b.setBoatLength(boats.get(j).getChildElements().get(2).getValue());

                }
            }
        }
    } catch (IOException e) {
        System.out.print("Could not read from the system");
    } catch (nu.xom.ParsingException e) {
        System.out.print("Parsing was unsuccessful!");
    } 
}

我得到了一个NullPointerException我认为-知道或不知道,没有思考。这永远不应该出现在你的代码中:catch NullPointerException e{…}你永远不应该捕捉NPE的。你应该改为修复它们,这样它们就不会发生。我要看看是否能得到错误并将其作为评论发布在这里请发布错误消息,作为对问题的编辑。同样,我在上面提到的catch块也会被去掉,因为它不会帮助你,而是会混淆你的错误,使你找不到它,因为它会导致你丢失导致异常的行号。是的,Sry。我已经去掉了那个钩子。我已经在控制台中发布了我现在遇到的错误。如果这是我的问题,我会尝试在一个小程序中调试它,第一个程序什么也不做,只是将XML文件作为文本读入,然后在控制台中打印出来,只是为了看看文件读取是否有效。如果这样做行得通,那么我会尝试将数据解析为XML,看看这样是否行得通。调试的关键通常是分而治之。
public void readFromSystem () {

    File file = null;
    Builder builder = null;
    Document doc = null;

    try {

        file = new File(filePath);
        builder = new Builder();
        doc = builder.build(file);

        Element root = doc.getRootElement();

        Elements members = root.getChildElements();


        for (int i = 0; i < members.size(); i++) {

            Elements element = members.get(i).getChildElements();
            Member member = new Member();

            member.setMemberId(Integer.parseInt(element.get(i).getAttribute("memberId").getValue()));
            member.setPersonId(element.get(0).getValue());
            member.setName(element.get(1).getValue());

            memberList.add(member);

            if (members.get(i).getChildElements().size() == 3) {

                Elements boats = element.get(2).getChildElements();

                for (int j = 0; j < boats.size(); j++) {

                    Boat b = new Boat();

                    b.setBoatId(Integer.parseInt(boats.get(j).getAttribute("boatId").getValue()));
                    b.setBoatType(Integer.parseInt(boats.get(j).getChildElements().get(1).getValue()));
                    b.setBoatLength(boats.get(j).getChildElements().get(2).getValue());

                }
            }
        }
    } catch (IOException e) {
        System.out.print("Could not read from the system");
    } catch (nu.xom.ParsingException e) {
        System.out.print("Parsing was unsuccessful!");
    } 
}