如何使用 dbus-java 注册 dbus 对象?

Posted

技术标签:

【中文标题】如何使用 dbus-java 注册 dbus 对象?【英文标题】:How to register dbus object using dbus-java? 【发布时间】:2013-02-21 11:23:33 【问题描述】:

我正在尝试使用来自 org.freedesktop 的 dbus-java 在 dbus 上注册对象。根据documentation,这样的操作需要:创建DBusConnection,创建对象,调用DBusConnection上的exportObject方法。

我的代码:

DatabaseAccessImpl dbAccess = new DatabaseAccessImpl();

    System.out.println("Object created.");



    System.out.println("Trying to connect session bus");
    try 
        conn = DBusConnection.getConnection(DBusConnection.SESSION);
     catch(DBusException ex) 
        ex.printStackTrace();
    

    System.out.println("Connected to session bus.");

    System.out.println("Trying to register dbus object");

    try 
        conn.exportObject("/obj/path", new DatabaseAccessImpl());
     catch (DBusException e) 
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    

在哪里:

DatabaseAccessImpl 是由 CreateInterface 自动创建的接口的实现(xml 在与 c++ (qt) 一起使用时工作正常)。

dbAccess 将在 dbus 上从数据库发送一些数据(主要是整数)。在 Qt 中一切正常,但我必须在 java(不是我的语言)中重新实现它。

要使用 dbus-java,您必须安装 libmatthew-debug 并使用

执行程序

-Djava.library.path=/usr/lib/jni

我正在研究 Linux Mint。

【问题讨论】:

【参考方案1】:

两件事:

    您需要先注册一个总线名称,即conn.requestBustName("com.example") DatabaseAccessImpl 需要实现一个扩展 DBusInterface 的接口。

Here's 我不久前用代码编写的教程,可以帮助您了解正在发生的事情。

【讨论】:

在本教程中,so在哪里?以及如何将 ref 添加到项目中??

以上是关于如何使用 dbus-java 注册 dbus 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 上编译和使用 java-dbus 2.7?

在java中运行时将DBus Variant的值转换为正确的类型

使用 Python 注册“Hello World”DBus 服务、对象和方法

使用 pythons Gio-Bindings 在 DBus 上注册对象

如何从控制台创建 dbus 服务?

如何使用 dbus/gio 向 bluez 注册个人资料?