【发布时间】:2016-11-03 21:32:23
【问题描述】:
当我运行已打包在 jar 中的项目时,每次尝试获取 BufferedReader 的内容时都会收到 NullPointerException。当它在 IDE (IntelliJ) 中运行时没有任何问题。我已经检查了所有以前的 InputStreams,它们似乎没问题。你有小费吗?提前谢谢!
String pathToFontDir = "/fonts/Open_Sans";
GraphicsEnvironment localGE = GraphicsEnvironment.getLocalGraphicsEnvironment();
final InputStream is = Session.class.getResourceAsStream(pathToFontDir);
if(is != null){
final InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
final BufferedReader br = new BufferedReader(isr);
List fonts = br.lines().collect(Collectors.toList()); //throws NullPointerException
if(fonts.size() > 0){
for(Object font: fonts){
InputStream fis = loader.getResourceAsStream(pathToFontDir + "/" + font);
localGE.registerFont(Font.createFont(Font.TRUETYPE_FONT, fis));
}
} else{
throw new IOException("Der angegebene Ordner enthält keine Schriftdateien!");
}
}
我也试着检查一下,我的 BufferedReader 是否包含任何内容,但它再次抛出异常而没有返回任何行:
String fontName;
while((fontName = br.readLine()) != null) //throws NPE as well
System.out.println(fontName);
堆栈跟踪:
java.lang.NullPointerException 在 java.io.FilterInputStream.read(未知来源) 在 sun.nio.cs.StreamDecoder.readBytes(未知来源) 在 sun.nio.cs.StreamDecoder.implRead(未知来源) 在 sun.nio.cs.StreamDecoder.read(未知来源) 在 java.io.InputStreamReader.read(未知来源) 在 java.io.BufferedReader.fill(未知来源) 在 java.io.BufferedReader.readLine(未知来源) 在 java.io.BufferedReader.readLine(未知来源) 在 java.io.BufferedReader$1.hasNext(未知来源) 在 java.util.Iterator.forEachRemaining(未知来源) 在 java.util.Spliterators$IteratorSpliterator.forEachRemaining(未知来源) 在 java.util.stream.AbstractPipeline.copyInto(未知来源) 在 java.util.stream.AbstractPipeline.wrapAndCopyInto(未知来源) 在 java.util.stream.ReduceOps$ReduceOp.evaluateSequential(未知来源) 在 java.util.stream.AbstractPipeline.evaluate(未知来源) 在 java.util.stream.ReferencePipeline.collect(未知来源) 在 main.java.backend.Session.importFontResource(Session.java:137) 在 main.java.backend.Session.main(Session.java:180)
【问题讨论】:
-
您确定所需文件已复制到 JAR 文件中吗?
-
是的,确实,我已经检查过一次了。
-
所以,本质上您是在尝试读取
Open_Sans文件,对吗?这就是失败的原因? -
嗯,是的,不是的,因为InputStream和InputStreamReader没有问题,我的控制台显示它们存在,甚至BufferedReader也存在,但我无法从中得到任何东西。它在调用 BR.lines().collect() 或 BR.readLine() 时抛出 NPE
-
所以看起来好像目录 Open_Sans 将存在于我的 JAR 中,但它是空的,但它不是。
标签: java jar nullpointerexception bufferedreader getresource