java是否仅在Gnome桌面上支持Linux平台上的桌面浏览?
使用以下代码运行我的Java应用程序:
if (Desktop.isDesktopSupported())
{
Desktop d = Desktop.getDesktop();
try
{
d.browse(new URI("someurl")); // someurl is just an example, I am opening real url
}
catch (IOException | URISyntaxException e)
{
logger.warn(ExceptionUtils.getStackTrace(e));
}
}
导致Manjaro Linux KDE上的应用程序没有响应(可能是死锁)。虽然它在Windows上运行没有问题,但我不想检查应用程序中的操作系统,只允许它在Windows上运行。我还没有尝试过其他平台
我使用的是:
- Adoptium JDK 11
- Manjaro内核5.10.83-1-Manjaro 64位
- KDE Plasma 5.23.4
- Qt 5.15.2
详细的死锁位置:
Desktop
类:
public void browse(URI uri) throws IOException {
checkAWTPermission();
checkExec();
checkActionSupport(Action.BROWSE);
Objects.requireNonNull(uri);
peer.browse(uri); // <- goes here
}
死锁发生在XDesktopPeer
类中,该类在方法gnome_url_show(...)
上实现DesktopPeer
接口(对等):
private void launch(URI uri) throws IOException {
byte[] uriByteArray = ( uri.toString() + '\0' ).getBytes();
boolean result = false;
XToolkit.awtLock();
try {
if (!nativeLibraryLoaded) {
throw new IOException("Failed to load native libraries.");
}
result = gnome_url_show(uriByteArray); // <- deadlock / app not responding here
} finally {
XToolkit.awtUnlock();
}
if (!result) {
throw new IOException("Failed to show URI:" + uri);
}
}
所以。。。Linux平台是否仅支持Gnome桌面上的桌面浏览
我猜这是因为这个方法名
如果是,我可以检查代码周围是否存在死锁,以便在我的应用程序中防止死锁?而不是检查操作系统和发行版
共 (0) 个答案