Ubuntu 16.04 上的 dbus java 库更新
Posted
技术标签:
【中文标题】Ubuntu 16.04 上的 dbus java 库更新【英文标题】:dbus java library update on Ubuntu 16.04 【发布时间】:2017-07-26 22:47:32 【问题描述】:我最近将我的 Ubuntu 14.04 升级到了 Ubuntu 16.04 LTS。我的一个项目使用 dbus java 库(http://www.java2s.com/Code/JarDownload/dbus/dbus.jar.zip)将蓝牙设备连接到 Ubuntu 操作系统。
在 Ubuntu 16.04 上,我收到以下异常:
`java.library.path=/usr/lib/jvm/java-8-openjdk-i386/jre/lib/i386/server:/usr/lib/jvm/java-8-openjdk-i386/jre/lib/i386::/usr/java/packages/lib/i386:/usr/lib/i386-linux-gnu/jni:/lib/i386-linux-gnu:/usr/lib/i386-linux-gnu:/usr/lib/jni:/lib:/usr/lib
Exception in thread "main" java.lang.NoClassDefFoundError: cx/ath/matthew/unix/UnixSocket
at org.freedesktop.dbus.Transport.connect(Transport.java:765)
at org.freedesktop.dbus.Transport.<init>(Transport.java:730)
at org.freedesktop.dbus.DBusConnection.<init>(DBusConnection.java:159)
at org.freedesktop.dbus.DBusConnection.getConnection(DBusConnection.java:142)`
我还注意到 Ubuntu 16.04 上的 bluez 软件包名称从 bluez-utils 更改为 bluez。
dbus java 库最后一次更新是在 2010-01-17。它可能需要使用最新的 Ubuntu 16.04 bluez 软件包进行更新(不确定??)
如果您对上述问题有任何指示,请分享。
【问题讨论】:
【参考方案1】:我使用了原始 java 库的 Git 分叉存储库,它解决了这个问题。 https://github.com/cathive/dbus-java
【讨论】:
【参考方案2】:需要进行一些侦探工作。在我的例子中,我有一台开发机器,其中 jar 文件执行良好,还有一台服务器,执行失败。
首先,哪个依赖是问题?缺少 jar 文件。
通过在两台机器上运行'java -verbose:class -jar JARFILENAME'并比较输出,我发现jvm使用了位于
的unix.jar和hexdump.jar/usr/share/java/unix.jar
/usr/share/java/hexdump.jar
而不是我曾经收录的。猜猜一个解决方案是重新编译 dbus-java.jar 以在本地使用它们,但是我在服务器上做了一个快速修复并添加了指向搜索到的 jar 的链接
ln -s /pathtomyunixdotjar/unix.jar /usr/share/java/unix.jar
ln -s /pathtomyunixdotjar/hexdump.jar /usr/share/java/hexdump.jar
在服务器上编译和安装 libmatthew-java 也可以解决这个问题。
【讨论】:
以上是关于Ubuntu 16.04 上的 dbus java 库更新的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu 16.04 上的 DB Visualizer - java.util.NoSuchElementException
Android Q - ubuntu16.04 上的 VTS 环境设置
Linux 上的 Qt 5.8 (ubuntu 16.04) 应用程序部署