我正在尝试使用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自动创建的接口(interface)的实现(xml与c++(qt)一起使用时效果很好)。

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

为了使用dbus-java,您必须安装libmatthew-debug并执行以下程序



我正在研究Linux Mint。

最佳答案

两件事情:

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

  • Here's我前一段时间编写的教程,其代码可以帮助您了解正在发生的事情。

    10-06 11:02