【问题标题】:Why Desktop.Open() doesn't work with MagicISO being installed为什么 Desktop.Open() 在安装 MagicISO 时不起作用
【发布时间】:2012-07-31 05:37:48
【问题描述】:

这是我的代码

if (Desktop.isDesktopSupported()) {
  Desktop desktop = Desktop.getDesktop();

  if (desktop.isSupported(Desktop.Action.OPEN)) {
    try {
      desktop.open(file.getCanonicalFile());
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  } else {
    System.out.println("Desktop open action is not supported");
  }
} else {
  System.out.println("Desktop is not supported");
}

我知道安装 MagicISO(从 this Java bug 获得)会使此代码不起作用。但为什么? MagicISO 具体做什么?我可以防止它发生或解决它吗?

更糟糕的是,这段代码没有抛出任何异常。它只是在那里保持沉默。这真的让我发疯了。

【问题讨论】:

  • 不能卸载 MagicISO 吗?
  • PS:Java bug 需要几十年才能修复,所以不要寄希望于找到解决方法

标签: java awt desktop shellexecute


【解决方案1】:

引用Launch file from Java 的第二个答案:

您可以通过Runtime 类启动应用程序:

在 Mac 上,

Runtime.getRuntime().exec(new String[] {"open", pathToFile});

在 Windows 上,

Runtime.getRuntime().exec(new String[] {"cmd.exe", "/C", pathToFile});

【讨论】:

    【解决方案2】:

    很遗憾,我以前没有听说过这个问题,但是您可以随时在代码的开头添加手动检查以查看是否已安装 MagicISO,如果已安装,请留下一条有用的消息,如“此程序不能由于...而运行”

    【讨论】:

      【解决方案3】:

      好吧,如果我不得不猜测一下,MagicISO 会修改注册表或以某种方式阻止 Java 知道使用什么程序启动文件。如果您正在寻找替代解决方案,请参阅 Adel Boutros 的回答

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        • 1970-01-01
        • 1970-01-01
        • 2018-01-17
        • 1970-01-01
        相关资源
        最近更新 更多