我有一个错误 - SAXParseException:文件过早结束 - 仅在运行我的 .jar 文件时:( 当你通过 main.class 运行时 - 一切都很好。
想了半天想明白原因,可惜一直没有找到,也无法解决问题。
- 检查了一个 xml 文件(记事本 ++,总指挥官) - 一切正常,没有多余的字符。
- 也检查文件的编码,一切正常。
- 试图摆脱 InputStream,但这对我没有帮助。
- 创建 .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;
}