Java中电池更改处理程序上的D总线信号未接收信号

Java中电池更改处理程序上的D总线信号未接收信号,java,xml,Java,Xml,我已经用Java编写了一个代码,它应该处理一个信号D-Bus freedesktop.PowerManagement.OnBatteryChanged。但当我拔下充电器时,什么也没发生。下面是代码片段 public class DBusDemo { public static void main(String[] args) throws DBusException { conn = DBusConnection.getConnection(DBusConnection

我已经用Java编写了一个代码,它应该处理一个信号D-Bus freedesktop.PowerManagement.OnBatteryChanged。但当我拔下充电器时,什么也没发生。下面是代码片段

public class DBusDemo {
    public static void main(String[] args) throws DBusException {
         conn = DBusConnection.getConnection(DBusConnection.DBusBusType.SESSION);
         conn.addSigHandler(PowerManagement.OnBatteryChanged.class, new _sighandler());
    }
    private static class _sighandler implements DBusSigHandler<PowerManagement.OnBatteryChanged> {

        @Override
        public void handle(PowerManagement.OnBatteryChanged onBatteryChanged) {
            System.out.println("on battery");
        }
    }
}  
当我获取远程对象电源管理并调用方法GetOnBattery()时,当我拔下充电器时,函数返回true,当充电器插入时,函数返回false。所以,PowerManagement对象似乎按预期工作。 但我的目标从未收到电池改变的信号

我做错了什么?每一个提示都将不胜感激

注:我正在使用xubuntu 20.04,以防相关

<interface name="org.freedesktop.PowerManagement">
    <method name="Shutdown"/>
    <method name="Reboot"/>
    <method name="Hibernate"/>
    <method name="Suspend"/>
    <method name="CanShutdown">
      <arg type="b" name="can_shutdown" direction="out"/>
    </method>
    <method name="CanReboot">
      <arg type="b" name="can_reboot" direction="out"/>
    </method>
    <method name="CanSuspend">
      <arg type="b" name="can_suspend" direction="out"/>
    </method>
    <method name="CanHibernate">
      <arg type="b" name="can_hibernate" direction="out"/>
    </method>
    <method name="GetOnBattery">
      <arg type="b" name="on_battery" direction="out"/>
    </method>
    <method name="GetLowBattery">
      <arg type="b" name="low_battery" direction="out"/>
    </method>
    <signal name="OnBatteryChanged">
      <arg type="b" name="on_battery"/>
    </signal>
    <signal name="LowBatteryChanged">
      <arg type="b" name="low_battery"/>
    </signal>
  </interface>
package org.freedesktop;

import org.freedesktop.dbus.exceptions.DBusException;
import org.freedesktop.dbus.interfaces.DBusInterface;
import org.freedesktop.dbus.messages.DBusSignal;

public interface PowerManagement extends DBusInterface {

    public void Shutdown();

    public void Reboot();

    public void Hibernate();

    public void Suspend();

    public boolean CanShutdown();

    public boolean CanReboot();

    public boolean CanSuspend();

    public boolean CanHibernate();

    public boolean GetOnBattery();

    public boolean GetLowBattery();

    public class OnBatteryChanged extends DBusSignal {

        public final boolean on_battery;

        public OnBatteryChanged(String objectpath, boolean on_battery) throws DBusException {
            super(objectpath, on_battery);
            this.on_battery = on_battery;
        }
    }

    public class LowBatteryChanged extends DBusSignal {

        public final boolean low_battery;

        public LowBatteryChanged(String objectpath, boolean low_battery) throws DBusException {
            super(objectpath, low_battery);
            this.low_battery = low_battery;
        }
    }
}