Java中电池更改处理程序上的D总线信号未接收信号
我已经用Java编写了一个代码,它应该处理一个信号D-Bus freedesktop.PowerManagement.OnBatteryChanged。但当我拔下充电器时,什么也没发生。下面是代码片段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
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;
}
}
}