使用运行时在其本机应用程序中打开文件。 (Windows 7的)

时间:2012-04-27 12:32:37

标签: java windows-7 applet

背景

我有一个我想恢复的旧applet。所有功能都适用于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)?

干杯。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您可能需要使用桌面支持,请查看以下链接:

Desktop.open

您只需使用要打开的文件的路径创建File,然后拨打Desktop.getDesktop().open(file)

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

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

javadesktop tutorial for java one 2004

希望这有帮助

这是项目网站:

JDIC Project

在这里你可以找到罐子:

Maven repo with jdic jars

答案 2 :(得分:1)

  1. RunTime.exec()的单行调用很少有效。请务必阅读并实施When Runtime.exec() won't
  2. 的所有建议
  3. 将参数分解为数组,以便更容易/更可预测的解析。
  4. 自1.5以来,J2SE提供ProcessBuilder,提供redirectErrorStream()等方法。反过来,这种方法可以更容易地实现第1点的一些建议。