gpt4 book ai didi

java - 如果没有默认程序使用 Runtime.getRuntime().exec ("filename ") 启动 .pdf 文件,如何处理?

转载 作者:行者123 更新时间:2023-12-01 12:09:08 26 4
gpt4 key购买 nike

我有 PDF 文件,我正在使用

打开它
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+filename+".pdf");

我能够正确打开文件,但如果没有默认程序来打开 pdf 文件,我需要处理它并向用户显示

我尝试了以下代码

public String openPdfFile(String filename){
String returnValue="";
try {
if(checkIfFileExists(filename+".pdf")){
Process pPDF= Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+filename+".pdf");
returnValue=""+pPDF.waitFor();
}
}

} catch (Exception e) {
return "ERROR";
}
return returnValue;
}

即使没有要启动的默认程序,它也始终返回 0。我怎样才能实现这个目标?

最佳答案

我建议使用Desktop.open(File)相反..它抛出:

IOException - if the specified file has no associated application or the associated application fails to be launched..

OP 回复(解释)..

That was really good suggestion and I tested it and it worked but it's an AWT API & I was looking for this functionality only in pure Java API..

AWT 是J2SE 中的一个包。你不可能得到比这更“纯粹”的东西。如果出于某种原因,“纯”意味着“没有 GUI 类”,那么这也没有意义,因为如果代码的用户位于可以显示 PDF 的计算机上,那么该方法应该可以工作。

此外,使用 exec 是最不纯粹的 Java(此外,这是一个非常糟糕的实现1 使用进程)!

这是一个小表,将上面显示的 exec 实现与 Desktop 方法进行比较。

**OS    **exec  **Desktop   
Windows maybe true
OS X false true
Linux false true
Unix false true

值的含义

  • true 表示它应该可以工作,除非 JRE 中存在错误,或者如上所述,没有适合该文件类型的查看器。
  • false它每次都会可靠地失败。
  • 也许它会起作用,假设:
    • 输出或错误流未满。
    • 文件名的路径或名称中没有空格。
    • 有适合该文件类型的查看器。

所以我不明白如何使用 exec 比使用 Desktop.open(File) 这样的跨平台方法更好。

  1. 参见When Runtime.exec() won't有关正确创建和处理流程的许多好技巧。然后忽略它引用 exec 并使用 ProcessBuilder 创建进程。

关于java - 如果没有默认程序使用 Runtime.getRuntime().exec ("filename ") 启动 .pdf 文件,如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27372623/

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