Desktop.getDesktop().browse 挂起
Desktop.getDesktop().browse Hangs
我正在开发一个应用程序,如果用户点击 link,我希望它在他们的默认浏览器中打开。根据我的阅读,这在理论上应该有效,但是,当 Linux 上的 运行(特别是 Linux Mint 17.1)时,它会挂起,直到程序被强制退出。我对在 WebView 中打开它不是特别感兴趣。大家能想到的任何替代方法或修复方法吗?提前致谢。
if(Desktop.isDesktopSupported()){
try{
Desktop.getDesktop().browse(new URI(url));
}catch (IOException | URISyntaxException e){
log.debug(e);
}
}
You are not alone。这是一个似乎在 JDK 1.6 和 1.7 的某些版本中发生的错误。我还没有看到它出现在 JDK 1.8 中。
它也可能发生在 Windows 上,您所能做的就是更新 JVM 或不使用桌面 class(这很糟糕)。
你从中得到了什么?:
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 ");
}
此外,请查看 Whosebug 上的 this and this 答案。
我正在使用 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);
}
}
我正在开发一个应用程序,如果用户点击 link,我希望它在他们的默认浏览器中打开。根据我的阅读,这在理论上应该有效,但是,当 Linux 上的 运行(特别是 Linux Mint 17.1)时,它会挂起,直到程序被强制退出。我对在 WebView 中打开它不是特别感兴趣。大家能想到的任何替代方法或修复方法吗?提前致谢。
if(Desktop.isDesktopSupported()){
try{
Desktop.getDesktop().browse(new URI(url));
}catch (IOException | URISyntaxException e){
log.debug(e);
}
}
You are not alone。这是一个似乎在 JDK 1.6 和 1.7 的某些版本中发生的错误。我还没有看到它出现在 JDK 1.8 中。
它也可能发生在 Windows 上,您所能做的就是更新 JVM 或不使用桌面 class(这很糟糕)。
你从中得到了什么?:
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 ");
}
此外,请查看 Whosebug 上的 this and this 答案。
我正在使用 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);
}
}