2

我正在尝试使用我的应用程序打开位于 ressource 文件夹中的 pdf。它确实可以在模拟器上运行,但是当我尝试导出的应用程序时没有任何反应。我猜我没有使用正确的路径,但看不出我错在哪里。getRessource 方法适用于我的图像。

这是一个代码片段:

public void openPdf(String pdf){
    if (Desktop.isDesktopSupported()) {
        try {
            URL monUrl  = this.getClass().getResource(pdf);
            File myFile = new File(monUrl.toURI());
            Desktop.getDesktop().open(myFile);


        } catch (IOException ex) {
            // no application registered for PDFs

        } catch (URISyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

我指的是 pdf 变量:“name_of_the_file.pdf”

编辑:我已经粘贴了整个方法

4

2 回答 2

5

好的,解决了。该文件位于一个 Jar 中,获取它的唯一方法是通过输入组/输出流并创建一个临时文件。

这是我的最终代码,效果很好:

public void openPdf(String pdf){
        if (Desktop.isDesktopSupported())   
        {   
            InputStream jarPdf = getClass().getClassLoader().getResourceAsStream(pdf);

            try {
                File pdfTemp = new File("52502HPA3_ELECTRA_PLUS_Fra.pdf");
                // Extraction du PDF qui se situe dans l'archive
                FileOutputStream fos = new FileOutputStream(pdfTemp);
                while (jarPdf.available() > 0) {
                      fos.write(jarPdf.read());
                }   // while (pdfInJar.available() > 0)
                fos.close();
                // Ouverture du PDF
                Desktop.getDesktop().open(pdfTemp);
            }   // try

            catch (IOException e) {
                System.out.println("erreur : " + e);
            }   // catch (IOException e)
        }
    }
于 2013-05-02T13:14:18.783 回答
1

您提到它在模拟器上运行,但不在应用程序上。运行应用程序的平台很可能不支持Desktop

Desktop.isDesktopSupported()

可能会回来false。因此没有堆栈跟踪或任何东西。

在 Mac 上,您可以执行以下操作:

Runtime runtime = Runtime.getRuntime();
    try {
        String[] args = {"open", "/path/to/pdfFile"};
        Process process = runtime.exec(args);
    } catch (Exception e) {
        Logger.getLogger(NoJavaController.class.getName()).log(Level.SEVERE, "", e);
    }
于 2013-05-02T12:01:22.257 回答