dbusを使用してJavaメソッドまたはオブジェクトをエクスポートするにはどうすればよいですか?
私がこれを書いているのは、公式ドキュメントが非常に貧弱で、その方法を理解するのに何時間もかかったからです。
理想的には、DBus インターフェイスは Java パッケージに入れる必要があります
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);
}
}
以下を実行して、シェルから qdbus でこれを試すことができます。
qdbus org.printer /org/printer/MessagePrinter org.printer.Print test