0

背景

我有一个想要恢复的旧小程序。所有功能均可在 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)?

.

干杯。

4

3 回答 3

2

阅读当 Runtime.exec() 不会时。它描述了许多常见的陷阱。

于 2012-04-27T12:35:57.300 回答
1

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

桌面.open

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

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

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

java 1 2004的javadesktop教程

希望这可以帮助

这是项目站点:

JDIC项目

在这里你可以找到罐子:

带有 jdic jars 的 Maven 仓库

于 2012-04-27T12:35:08.873 回答
1
  1. 单行调用RunTime.exec()很少起作用。请务必阅读并实施When Runtime.exec() won't的所有建议。
  2. 将参数分解成一个数组,以便更容易/更可预测地解析。
  3. 从 1.5 开始,J2SE 提供了ProcessBuilder提供诸如redirectErrorStream(). 反过来,该方法可以更容易地实施第 1 点的一些建议。
于 2012-04-27T12:41:23.797 回答