当前位置: 首页 > 知识库问答 >
问题:

我试着在Java开一个pdf,但是没有用

熊烨
2023-03-14

我试图通过点击按钮打开一个pdf文件。 路径实际上是正确的(我可以在浏览器中打开它),但它不工作。 问题究竟出在哪里?

以下是输出:

文件:/users/miladvosoughi/documents/prak/schach/target//mainmenu/ba.pdf

文件不存在!

    private void openHelpPDF() {
         
        try {
            String adr = getClass()
                    .getResource("/mainMenu/ba.pdf").toString();
            
            System.out.println(adr);
            
            File pdfFile = new File(adr);
            if (pdfFile.exists()) {

                if (Desktop.isDesktopSupported()) {
                    Desktop.getDesktop().open(pdfFile);
                } else {
                    System.out.println("Awt Desktop is not supported!");
                }

            } else {
                System.out.println("File is not exists!");
            }

     
          } catch (Exception ex) {
            ex.printStackTrace();
          }
        
    }

共有2个答案

越嘉茂
2023-03-14

此问题是由于您在中使用.toString()引起的

String adr = getClass().getResource("/mainMenu/ba.pdf").toString();

从而生成一个字符串,该字符串不是java.io.File API所定义的路径名。

基本上,生成的file:/users/.../ba.PDF字符串中的前缀file:(源自URL类型)并不将PDF文件的位置描述为路径名。 但是,您使用的file构造函数需要一个字符串路径名。 因此,如果要将一个字符串传递给file构造函数,它应该类似于/users/...//mainmenu/ba.pdf,而不包含file:部分。

如果您想坚持使用java.io.file,API可以使用

   URL adr = getClass().getResource("/mainMenu/ba.pdf");

   System.out.println(adr);

   File pdfFile = new File(adr.toURI());
吴哲
2023-03-14

string adr=getClass()。getResource(“/mainmenu/ba.pdf”)。toString();不返回文件名。 从Class.GetResource返回的对象是URL。

应用程序资源不是文件。 永远不能安全地假定它是一个文件。

如果要传递资源,必须将资源URL复制到临时文件,然后打开:

Path pdf = Files.createTempFile(null, ".pdf");
try (InputStream source =
    getClass().getResourceAsStream("/mainMenu/ba.pdf")) {

    Files.copy(source, pdf,
        StandardCopyOption.REPLACE_EXISTING);
}

Desktop.getDesktop().open(pdf.toFile());
 类似资料:
  • 我提交了一个交易,但没有被开采。 创建和发送交易后,会收到交易hash,但是调用eth_getTransactionReceipt却总是返回空值,指示交易未被挖掘,代码如下: String transactionHash = sendTransaction(...); // you loop through the following expecting to eventually get a

  • 问题内容: 在Java教程“定义接口”中,它说 如果未指定interface为,则只有与该接口在同一包中定义的类才能访问该接口。 但是这个 生成编译器错误是因为我试图分配较弱的访问权限;是公开的”。那么文档有误,或者我做错了什么,或者我对文档有误解? 我想我不必使用接口-我喜欢它,因为它可以使事情井井有条。 问题答案: 接口本身可以是包私有的,而不是其中的方法。您可以定义一个只能在其定义的包中使用

  • 在我们的应用程序中,我们有一个场景,我们点击一个链接,点击后打开一个新的选项卡,其中有一个动态生成的PDF。 生成的将在new选项卡中打开,并以作为URL。 我没有选择下载生成的PDF以及。 我们有什么办法能解决这个问题吗??提前谢谢你。

  • 问题内容: 编码 给出输出 然后是代码 引发异常 总而言之,有一个类,但是模块没有attribute 。到底是怎么回事? 我正在使用Matplotlib 1.1.0和Python 2.7.3。 问题答案: 嘿。这是因为有 是 无类..直到有需要,当一个人从建。这是通过以下方法实现的: 因此它是即时生成的,但是它是的子类:

  • 问题内容: class GraphGenerator1 extends JPanel { ChartPanel chartPanel, sbc; 我有一个要更新的条形图,我尝试了revalidate和repaint方法,但没有成功。我什至还添加了chartPanel.addMouseListener(this)。我不知道我在哪里出错或应该在哪里添加一些内容。我有意将mouseListener添加到

  • 显示已经搜索到驱动程序,但连接仍然失败。 如何修复错误?

  • 我正试图在Java制作一个抽风游戏,但我的GUI就是没有出现。它制作了一个棋盘,你可以按下按钮来玩井字游戏。我刚来Java,所以我不知道哪里出了问题。它没有错误,我使用repl。怎么啦? 这里是我的第二个Java文件: 另外,我已经加载了x.png和o.png。