如何找到Java Desktop API在Linux上需要哪些库?

2022-09-04 23:31:31

我试图找到一种方法来确定Java需要哪些库才能使桌面API工作,特别是函数。我阅读了一些指南,错误报告和解决方法,但没有一个有效。BROWSE

我能够通过安装和软件包使它在 Debian 上工作。第一个通常是推荐的(由解决相同问题的人推荐),第二个是幸运的猜测,因为桌面API似乎需要vfs。但是,我无法在Ubuntu 14.04上完成这项工作,即使安装了这两个软件包。libgnome2-0gvfs-backends

所以我的问题是:如何找到Java Desktop API在Linux上需要哪些库?特别是Ubuntu 14.04上的Oracle JDK 8。是否有可能以某种方式捕获桌面 API 正在使用哪些库,或者从本机代码中获取一些错误输出?

编辑:我创建了一个尝试使用浏览的一行代码:

public class Main {
    public static void main(String[] args) throws URISyntaxException, IOException {
        Desktop.getDesktop().browse(new URI("http://www.google.com"));
    }
}

我尝试运行一个命令来跟踪在执行测试期间请求的所有文件:

strace -e open,access -f -o browse java -jar BrowseTester.jar

我得到了很多输出,表明java原生和Linux原生库都在寻找,找到和访问,但我不知道如何检测实际缺少的内容。

输出示例:

30171 open("/usr/lib/x86_64-linux-gnu/gvfs/tls/x86_64/libgvfscommon.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
30171 open("/usr/lib/x86_64-linux-gnu/gvfs/tls/libgvfscommon.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
30171 open("/usr/lib/x86_64-linux-gnu/gvfs/x86_64/libgvfscommon.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
30171 open("/usr/lib/x86_64-linux-gnu/gvfs/libgvfscommon.so", O_RDONLY|O_CLOEXEC) = 11

我需要一种方法来检测 Java 桌面 API 浏览功能需要哪些本机库。我无法触摸正在调用浏览的代码。

编辑2:我试图在另一台机器上安装一个新的Ubuntu 14.04与完整的Gnome环境,它可以工作。但是,我真的很想避免这种情况,因为它增加了1.5GB(大多数)未使用的库。仍然在寻找一种方法,如何找到Java需要的确切内容,或者至少从它失败的地方找到某种输出。


答案 1

转到源头可能会有所帮助。通过挖掘Makefile,我发现这些包括:

EXTRA_INCLUDES = `pkg-config --cflags glib-2.0` \
                 `pkg-config --cflags libgnome-2.0` \
                 `pkg-config --cflags gnome-vfs-2.0`\
                 `pkg-config --cflags gnome-vfs-module-2.0` \
                 `pkg-config --cflags bonobo-activation-2.0` \
                 `pkg-config --cflags libbonobo-2.0` \
                 `pkg-config --cflags ORBit-2.0` \
                 `pkg-config --cflags gconf-2.0`

在那里你有它:)


答案 2

我刚刚有了另一个想法:也许你可以用代替?ltracestrace

ltrace -e open,access -f -o browse java -jar BrowseTester.jar

推荐