为啥 Desktop.Open() 在安装 MagicISO 时不起作用
Posted
技术标签:
【中文标题】为啥 Desktop.Open() 在安装 MagicISO 时不起作用【英文标题】: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 需要几十年才能修复,所以不要寄希望于找到解决方法 【参考方案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 的回答
【讨论】:
以上是关于为啥 Desktop.Open() 在安装 MagicISO 时不起作用的主要内容,如果未能解决你的问题,请参考以下文章