エラーがあります - 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;
}