为什么Desktop.Open()不能与正在安装的MagicISO一起使用

时间:2012-08-02 09:03:42

标签: java awt desktop shellexecute

这是我的代码

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具体做什么?我可以阻止它发生或解决它吗?

更糟糕的是,此代码不会引发任何异常。它只是在那里保持沉默。这真的让我很疯狂。

3 个答案:

答案 0 :(得分:0)

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

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

在Mac上,

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

在Windows上,

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

答案 1 :(得分:0)

不幸的是我以前没有听说过这个问题,但你总是可以在代码的开头添加一个手动检查,以查看是否已经安装了MagicISO,如果是这样的话,请在"这一行留下有用的信息由于......"

,程序无法运行

答案 2 :(得分:0)

如果我不得不猜测,MagicISO会以某种方式修改注册表或其他东西,以防止Java知道启动文件的程序。如果您正在寻找替代解决方案,请参阅Adel Boutros的回答