gpt4 book ai didi

java - 当从 JAR 而不是 Eclipse 运行时,从我的 Java 应用程序打开 tmp PDF 时出错

转载 作者:太空宇宙 更新时间:2023-11-04 07:38:49 24 4
gpt4 key购买 nike

我希望当用户在我的应用程序中单击“帮助”时能够打开 PDF 文件。 PDF 文件位于 JAR 中,解压到 tmp 目录,然后选择通过 awt.Desktop.getDesktop () 打开(以允许 Windows 和 Linux 使用)。

当我从 Eclipse 运行该应用程序时,它工作正常,PDF 打开时没有错误。当我导出到 JAR 并运行时,我收到一条错误消息,指出“PDF 文档已损坏”,如果我手动导航到 PDF 文档(在我的 ubuntu 机器上/tmp/546434564.pdf),那么当我尝试打开该文件时,我会收到相同的错误。我很困惑发生了什么事。 “损坏”PDF 的文件大小与工作 PDF 的文件大小相同,因此我认为这不是权限问题。

我使用的代码是:

public Main() throws FontFormatException, IOException {

//lets load the font
Font font = Font.createFont(Font.TRUETYPE_FONT, this.getClass().getResourceAsStream("/Coalition_v2.ttf")).deriveFont(Font.PLAIN, 14);
System.out.println(font);

//lets write the tmp file for help to the machine now
try {
java.io.InputStream iss = getClass().getResourceAsStream("/nullpdf.pdf"); //update the filename here when the help guide is written
byte[] data = new byte[iss.available()];
iss.read(data);
iss.close();
String tempFile = "file";
File temp = File.createTempFile(tempFile, ".pdf");
FileOutputStream fos = new FileOutputStream(temp);
fos.write(data);
fos.flush();
fos.close();
tmphelpfile = temp.getAbsolutePath();
System.out.println(tmphelpfile);
} catch (IOException ex) {
ex.printStackTrace();
System.out.println("TEMP FILE NOT CREATED - ERROR in tmp file writing");
}

然后调用pdf:

JMenu mnHelpGuide = new JMenu("Help Guide");
mnHelpGuide.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// Help();
Desktop d = java.awt.Desktop.getDesktop ();

try {
System.out.println(tmphelpfile);
d.open (new java.io.File (String.valueOf(tmphelpfile)));
} catch (IOException e1) {
// TODO Auto-generated catch block
System.out.println("Couldnt open your file - error on HELP Guide");
e1.printStackTrace();
}
}
});

最佳答案

谢谢大家的帮助。通过导入 ApachecommonsIO jar 然后将代码修改为以下内容解决了该问题:

 try {
java.io.InputStream iss = getClass().getResourceAsStream("/nullpdf.pdf"); //update the filename here when the help guide is written
// byte[] data = new byte[iss.available()];
byte[] data = IOUtils.toByteArray(iss);
iss.read(data);
iss.close();
String tempFile = "file";
File temp = File.createTempFile(tempFile, ".pdf");
FileOutputStream fos = new FileOutputStream(temp);
fos.write(data);
fos.flush();
fos.close();
tmphelpfile = temp.getAbsolutePath();
System.out.println(tmphelpfile);
} catch (IOException ex) {
ex.printStackTrace();
System.out.println("TEMP FILE NOT CREATED - ERROR in tmp file writing");
}

关于java - 当从 JAR 而不是 Eclipse 运行时,从我的 Java 应用程序打开 tmp PDF 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16382377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com