为啥 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 时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥片段着色器比渲染纹理更快?

在着色器中访问时,OpenGL 如何决定使用 MAG_FILTER 和 MIN_Filter?

微星 MAG245R2评测

sh 选择带有BGC的MAG

BetaFlight深入传感设计之二:Mag传感模块

BetaFlight深入传感设计之二:Mag传感模块