有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案