Desktop.getDesktop()。浏览挂起

时间:2015-01-10 18:42:57

标签: java awt native

我正在开发一个应用程序,如果用户点击链接,我希望它在默认浏览器中打开。从我读过的内容来看,这在理论上应该可行,但是,当在Linux上运行时(特别是Linux Mint 17.1),它会挂起,直到程序强行退出。我对在WebView中打开它并不特别感兴趣。您可以想到的任何替代方案或修复方案?提前谢谢。

if(Desktop.isDesktopSupported()){
    try{
       Desktop.getDesktop().browse(new URI(url));
    }catch (IOException | URISyntaxException e){
       log.debug(e);
    }
}

3 个答案:

答案 0 :(得分:1)

我正在使用Ubuntu 16.04,并且在使用Desktop.getDesktop()。browse()时遇到相同的问题。这是我正在使用的解决方法:

public void browseURL(String urlString) {

    try {
        if (SystemUtils.IS_OS_LINUX) {
            // Workaround for Linux because "Desktop.getDesktop().browse()" doesn't work on some Linux implementations
            if (Runtime.getRuntime().exec(new String[] { "which", "xdg-open" }).getInputStream().read() != -1) {
                Runtime.getRuntime().exec(new String[] { "xdg-open", urlString });
            } else {
                showAlert("Browse URL", "xdg-open not supported!", true);
            }
        } else {
            if (Desktop.isDesktopSupported())
            {
                Desktop.getDesktop().browse(new URI(urlString));
            } else {
                showAlert("Browse URL", "Desktop command not supported!", true);
            }
        }

    } catch (IOException | URISyntaxException e) {
        showAlert("Browse URL", "Failed to open URL " + urlString , true);
    }
}

答案 1 :(得分:0)

You are not alone。这是一些在JDK 1.6和1.7的某些版本中出现的错误。我还没有在JDK 1.8中看到它。

它也可以在Windows上发生,您可以做的就是更新JVM或不使用Desktop类(这很糟糕)。

答案 2 :(得分:0)

你从中得到了什么?:

if (Desktop.isDesktopSupported()) {
  System.out.println("Desktop IS supported on this platform ");

  if (Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
    System.out.println("Action BROWSE  IS supported on this platform ");
  }
  else {
    System.out.println("Action BROWSE  ISN'T supported on this platform ");
  }
}
else {
  System.out.println("Desktop ISN'T supported on this platform ");
}

另外,请在stackoverflow上查看thisthis个答案。