我在点击按钮时尝试打开PDF文件。但是,当我将程序作为JAR运行时,我似乎无法正常工作。
最初,我使用的是这段代码:
if(Desktop.isDesktopSupported())
{
try
{
File myFile = new File("src/1. Handel - And the Glory of the Lord.pdf");
Desktop.getDesktop().open(myFile);
}
catch (Exception e)
{
JOptionPane.showMessageDialog(null,e);
}
}
这对Netbeans起了作用,但它并没有对JAR起作用。经过研究,我发现了它,因为我需要使用流打开它。意思是我必须将它作为流复制,并将该副本作为文件打开。在查看堆栈溢出后,我现在使用此代码:
try {
String inputPdf = "src/1. Handel - And the Glory of the Lord.pdf";
InputStream manualAsStream = getClass().getClassLoader().getResourceAsStream(inputPdf);
Path tempOutput = Files.createTempFile("1. Handel - And the Glory of the Lord", ".pdf");
tempOutput.toFile().deleteOnExit();
Files.copy(manualAsStream, tempOutput, StandardCopyOption.REPLACE_EXISTING);
File file = new File (tempOutput.toFile().getPath());
if (file.exists())
{
Desktop.getDesktop().open(file);
}
} catch (IOException ex) {
Logger.getLogger(HandelNotes.class.getName()).log(Level.SEVERE, null, ex);
}
这甚至不适用于Netbeans,而在Stack Exchange上的另一个线程上,用户表示它适用于他们。
我收到了一行java.lang.NullPointerException错误:
Files.copy(manualAsStream, tempOutput, StandardCopyOption.REPLACE_EXISTING);
有谁知道出了什么问题,有人可以告诉我如何纠正我的代码吗?
谢谢, 罗汉