Mar*_*rga 13 java linux java-native-interface swing awt
我试图找到一种方法来确定Java需要哪些库才能使Desktop API工作,特别是BROWSE函数.我阅读了一些指南,错误报告和解决方法,但它们都不起作用.
通过安装libgnome2-0和gvfs-backends打包,我能够使它在Debian上运行.第一个通常是推荐的(由人们解决相同的问题),第二个是幸运的猜测,因为似乎桌面API需要vfs.但是,即使安装了这两个软件包,我也无法在Ubuntu 14.04上完成这项工作.
所以我的问题是:如何在Linux上找到Java Desktop API需要哪些库?特别是在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"));
}
}
Run Code Online (Sandbox Code Playgroud)
我试图运行一个命令来跟踪在执行测试期间请求的所有文件:
strace -e open,access -f -o browse java -jar BrowseTester.jar
Run Code Online (Sandbox Code Playgroud)
我得到了很多输出,表明正在寻找,发现和访问java native和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
Run Code Online (Sandbox Code Playgroud)
我需要一种方法来检测Java Desktop API浏览功能需要哪些本机库.我无法触摸调用浏览的代码.
编辑2:我试图在不同的机器上安装一个带有完整Gnome环境的新Ubuntu 14.04,它可以工作.但是我真的想避免这种情况,因为它增加了1.5GB(大部分)未使用的库.仍然在寻找一种方法如何找到Java所需要的内容,或者至少从失败的地方找到某种输出.
访问源代码可能会有所帮助。深入研究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`
Run Code Online (Sandbox Code Playgroud)
就这样你就得到了:)