1

我有一个错误 - SAXParseException:文件过早结束 - 仅在运行我的 .jar 文件时:( 当你通过 main.class 运行时 - 一切都很好。

想了半天想明白原因,可惜一直没有找到,也无法解决问题。

  1. 检查了一个 xml 文件(记事本 ++,总指挥官) - 一切正常,没有多余的字符。
  2. 也检查文件的编码,一切正常。
  3. 试图摆脱 InputStream,但这对我没有帮助。
  4. 创建 .jar 文件并使用 gradle 和 IntelliJ IDEA 的标准方法,并没有帮助...

所以,朋友们,我很困惑,如果有人能提供帮助,我将非常感激。

程序的正文,如下:

public ArrayList<Job> getJobsCfg() {
    ArrayList<Job> listJob = new ArrayList<>();
    try {
        InputStream is = this.getClass().getResourceAsStream("/config/cfgExecJobs.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(is);
        NodeList jobs = doc.getElementsByTagName("job");
        for (int i = 0; i < jobs.getLength(); i++) {
            Job job = new Job();
            listJob.add(job);
            Node jobNode = jobs.item(i);
            job.setName(jobNode.getAttributes().getNamedItem("name").getNodeValue());
            job.setCronTrigger(jobNode.getAttributes().getNamedItem("cronTrigger").getNodeValue());
            job.setEnable(jobNode.getAttributes().getNamedItem("enable").getNodeValue());
            NodeList params = jobs.item(i).getChildNodes();
            for (int j = 0; j < params.getLength(); j++) {
                if (params.item(j).getNodeType() == Node.ELEMENT_NODE) {
                    Param param = new Param();
                    param.setName(params.item(j).getAttributes().getNamedItem("name").getNodeValue());
                    param.setValue(params.item(j).getAttributes().getNamedItem("value").getNodeValue());
                    job.getListParam().add(param);
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return listJob;
}

我试过没有 InputStream:

    public ArrayList<Job> getJobsCfg() {
    ArrayList<Job> listJob = new ArrayList<>();
    try {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse("src/main/resources/config/cfgExecJobs.xml");
        ...
    } catch (Exception e) {
        e.printStackTrace();
    }
    return listJob;
}
4

0 回答 0