【问题标题】:Using runtime to open file in its native application. (Windows 7)使用运行时在其本机应用程序中打开文件。 (Windows 7的)
【发布时间】:2012-05-08 04:53:30
【问题描述】:

背景

我有一个想要恢复的旧小程序。所有功能均可在 Windows XP 中运行。但是,在 Windows 7 中,无法在其本机应用程序中打开文件(下面的部分代码)。什么都没有发生,没有错误或类似的东西。我正在使用 Java 版本 1.5.0 (J2SE 5.0),因此 Desktop.getDesktop(); 将不起作用!

代码

public void start(String sFileName, String sDir, ctgraphics gGfx) {
    String command = '"' + sDir + sFileName + '"';
    Runtime myRuntime = Runtime.getRuntime();
    try {
        myRuntime.exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " + command);
        gGfx.setStatusText("File opened.");
        gGfx.drawStatusBar(1);
    } catch (IOException e) {

        System.out.println("Error " + e.getMessage());
    }

}

问题

为什么上面的代码在 Windows 7 中不起作用,我需要做什么才能在其本机应用程序中打开文件(考虑到我使用的是 Java v. 1.5)?

.

干杯。

【问题讨论】:

  • catch (IOException e) { ..e.getMessage().. 尽管代码目前没有产生异常输出,但我建议更改最后一部分以添加:e.printStackTrace();

标签: java windows-7 applet


【解决方案1】:

您可能想要使用桌面支持,请查看此链接:

Desktop.open

你只需创建一个File,其中包含你要打开的文件的路径,然后调用Desktop.getDesktop().open(file)

在 1.5 之前桌面是一个库,然后它进入了标准 JDK,您可以考虑使用此选项。

在这里你可以找到一个教程:

javadesktop tutorial for java one 2004

希望对你有帮助

这里是项目站点:

JDIC Project

你可以在这里找到罐子:

Maven repo with jdic jars

【讨论】:

  • Desktop 是 1.6+ 并且 OP 明确声明“我正在使用 Java 版本 1.5.0 (J2SE 5.0),因此 Desktop.getDesktop(); 将不起作用!”。请删除这个“不是答案”。
  • 在 1.6 之前,它是一个单独的库,您可以添加到您的项目中。
  • 如果您找到指向该链接的链接,我可以投票。到目前为止很好的编辑。 :)
  • 这是2004年的教程,只是一个奇怪的问题,你不能使用java 6吗?
  • 啊,又是 JDIC。您是否点击了任何指向 JDIC 主页的链接?这是一个 404。
【解决方案2】:
  1. RunTime.exec() 的单行调用很少起作用。请务必阅读并落实When Runtime.exec() won't 的所有建议。
  2. 将参数分解为一个数组,以便更轻松/更可预测地解析。
  3. 从 1.5 开始,J2SE 提供了ProcessBuilder,它提供了redirectErrorStream() 等方法。反过来,该方法可以更轻松地实施第 1 点的一些建议。

【讨论】:

    【解决方案3】:

    阅读When Runtime.exec() won't。它描述了许多常见的缺陷。

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 2019-02-02
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 2011-07-06
      • 1970-01-01
      相关资源
      最近更新 更多