使用 dbus 调用 java 方法

Posted

技术标签:

【中文标题】使用 dbus 调用 java 方法【英文标题】:Call java method with dbus 【发布时间】:2013-01-25 07:21:48 【问题描述】:

如何使用 dbus 导出 java 方法或对象?

我写这篇文章是因为官方文档很差,我花了好几个小时才弄清楚该怎么做。

理想情况下,DBus 接口应该放在 java 包中

【问题讨论】:

【参考方案1】:

DBus.java

import org.freedesktop.dbus.DBusInterface;
import org.freedesktop.dbus.DBusInterfaceName;    

@DBusInterfaceName("org.printer")
public interface DBus extends DBusInterface 
    //Methods to export
    public void Print(String message);

Main.java

import org.freedesktop.dbus.DBusConnection;
import org.freedesktop.dbus.exceptions.DBusException;

public class Main     
    public static void main(String[] args) 
        Printer p = new Printer();

        try 
            DBusConnection conn = DBusConnection.getConnection(DBusConnection.SESSION);
            //Creates a bus name, it must contain some dots.
            conn.requestBusName("org.printer");
            //Exports the printer object
            conn.exportObject("/org/printer/MessagePrinter", p);
        catch (DBusException DBe) 
           DBe.printStackTrace();
           conn.disconnect();
           return;
       
    


//Printer object, implements the dbus interface and gets
//called when the methods are invoked.
class Printer implements DBus 
    public boolean isRemote() 
        return false;
    

    public void Print(String message) 
        System.out.println(message);
    

您可以在 shell 中使用 qdbus 试试这个,运行:

qdbus org.printer /org/printer/MessagePrinter org.printer.Print test

【讨论】:

以上是关于使用 dbus 调用 java 方法的主要内容,如果未能解决你的问题,请参考以下文章

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

在gjs中使用GDBus调用DBus方法,没有输出?

打印出 C 中 Dbus 方法调用的响应

C中的Dbus结构和方法调用

如何通过 dbus-send 发送方法调用?

为啥不能在 Python 中使用 dbus 调用 org.freedesktop.NetworkManager 中的方法?