一次开发中,软件开发好了,把jar包单独拿出来运行,结果报了这个错误:
org.yaml.snakeyaml.error.YAMLException: java.io.IOException: Stream closed
at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:200)
at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:60)
at org.yaml.snakeyaml.Yaml.loadAs(Yaml.java:444)
at com.um.dvb.utils.ConfigTool.loadConfigMap(ConfigTool.java:50)
at com.um.dvb.DvbToolApplication.main(DvbToolApplication.java:44)
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:498)
at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:85)
at com.exe4j.runtime.WinLauncher.main(WinLauncher.java:94)
Caused by: java.io.IOException: Stream closed
at java.io.PushbackInputStream.ensureOpen(PushbackInputStream.java:74)
at java.io.PushbackInputStream.read(PushbackInputStream.java:166)
at org.yaml.snakeyaml.reader.UnicodeReader.init(UnicodeReader.java:90)
at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:122)
at java.io.Reader.read(Reader.java:140)
at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:184)
... 10 more
在编译器中使用没有问题,打包出来就报错了,经过百度,说的都是其他与我无瓜的答案,最后找到了原因:
解决前:(注意这段代码:"./config/jdbc_local.yml")
public void loadConfigMap(Class clazz, String filePath, boolean isFromJar) {
Object o = null;
if (isFromJar) {
o = mYaml.loadAs(clazz.getClassLoader().getResourceAsStream("./config/jdbc_local.yml"), clazz);
} else {
try {
o = mYaml.loadAs(new FileInputStream(new File(filePath)), clazz);
} catch (FileNotFoundException ex) {
Logger.getLogger(ConfigTool.class.getName()).log(Level.SEVERE, null, ex);
return;
}
}
configMap.put(clazz.getName(), o);
}
解决后:(注意这段代码:"config/jdbc_local.yml")
public void loadConfigMap(Class clazz, String filePath, boolean isFromJar) {
Object o = null;
if (isFromJar) {
o = mYaml.loadAs(clazz.getClassLoader().getResourceAsStream("config/jdbc_local.yml"), clazz);
} else {
try {
o = mYaml.loadAs(new FileInputStream(new File(filePath)), clazz);
} catch (FileNotFoundException ex) {
Logger.getLogger(ConfigTool.class.getName()).log(Level.SEVERE, null, ex);
return;
}
}
configMap.put(clazz.getName(), o);
}
我打死都没有想到是这里出了问题,记一次坑!!!